首先,我必须生成一个新密钥以添加到帐户中。我将命名密钥msig.lak1
,用于向我的帐户添加新的受限访问密钥 (LAK) msig
:
near generate-key msig.lak1
复制生成的公钥。
为了参考和签署 txs,就像confirm
在 multisig 合同上一样,可以在这里找到 secretKey:code ~/.near-credentials/default/msig.lak1.json
现在我需要将此添加到帐户msig
中。
鉴于near shell 不提供向帐户添加新密钥的功能,我将不得不使用near repl。
near repl
使用我的多重签名合约账户的 accountId启动msig
,只有 1 个完整的访问密钥。
near repl --accountId msig
>
更新:(感谢@vlad-grichina 评论)
await account.addKey("PUBLIC KEY FROM GENERATE KEY", contractName, 'confirm')
因为这是一个单一的动作 tx。
上一篇:(如果是捆绑动作)
现在我将创建一个addKey
交易并使用该msig
帐户对其进行签名。
const contractName = "msig"
const result = account.signAndSendTransaction('msig', [
nearAPI.transactions.addKey(nearAPI.utils.PublicKey.from("PUBLIC KEY FROM GENERATE KEY"), nearAPI.transactions.functionCallAccessKey(contractName, ['confirm'], null)),
])
我可以使用近壳来验证是否添加了密钥:
near keys msig
现在我可以使用密钥来确认多重签名合约请求:
// in my JS app
await window.keyStore.setKey(
NETWORK_ID, contractName,
// from ~/.near-credentials/default/msig.lak1.json
nearApi.KeyPair.fromString(secretKey)
)
const contract = new nearApi.Contract(window.contractAccount, contractName, {
changeMethods: ['confirm'],
sender: contractName
})
...
contract.confirm({ request_id: X }) // confirms request
我还可以在资源管理器中检查并查看添加访问密钥 tx 是否成功:
https ://explorer.testnet.near.org/accounts/msig