创建Flow账户时触发「duplicated signature for key」异常求助
Flow平台创建账户时重复签名错误的解决方案
问题背景
刚接触Flow平台,尝试创建账户并部署合约发行代币,使用以下Cadence交易脚本创建账户:
transaction(publicKey: String) { prepare(signer: AuthAccount) { let account = AuthAccount(payer: signer) account.addPublicKey(publicKey.decodeHex()) } }
调用Java客户端的createAccount方法时,传入服务账户地址和模拟器公钥,收到错误:
io.grpc.StatusRuntimeException: INTERNAL: duplicated signature for key (address: f8d6e0586b0a20c7, index: 0)
问题原因
代码中对同一个账户的同一密钥同时添加了payload签名和envelope签名,而Flow交易规则明确:当交易的提案者、付款人和签名者为同一账户时,仅需一次签名即可,重复签名会触发平台的重复签名校验错误。
解决方案
移除代码中的addPayloadSignature调用,只保留addEnvelopeSignature即可。修改后的关键代码如下:
Signer signer = Crypto.getSigner(this.privateKey, payerAccountKey.getHashAlgo()); // 移除重复签名的代码 // tx = tx.addPayloadSignature(payerAddress, 0, signer); tx = tx.addEnvelopeSignature(payerAddress, 0, signer);
补充说明
Flow交易签名核心规则:
- 单签名场景(提案者、付款人、授权者为同一账户):仅需对交易信封(Envelope)签名一次,无需额外的payload签名。
- 多签名场景:不同账户需分别对payload和envelope完成签名,以此完成多主体授权。
内容的提问来源于stack exchange,提问作者damian
相关产品推荐
相关产品推荐

