Skip to content

Instantly share code, notes, and snippets.

@joyqvq
Last active January 30, 2023 22:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joyqvq/5febd8deb5cacc6f47afa1253224b7da to your computer and use it in GitHub Desktop.
Save joyqvq/5febd8deb5cacc6f47afa1253224b7da to your computer and use it in GitHub Desktop.
Test Multisig Script
## Test Multisig Script
One tab:
```
cargo run --bin sui-test-validator
```
One tab:
1. Add some keys to keystore
```
target/debug/sui client new-address secp256r1
target/debug/sui client new-address ed25519
target/debug/sui client new-address ed25519
target/debug/sui keytool list
Sui Address | Public Key (Base64) | Scheme
----------------------------------------------------------------------------------------------------
0x6e1ab690e153b56e615b52f1d63ad1b1e648652e | AgJTS++o+mJKX63fZ3UCNfijUFitIRm6clhno8rnp+XEJw== | secp256r1
0xb59ce11ef3ad15b6c247dda9890dce1b781f99df | AGVvsLi5Q5mXUQf0ljzUn0iA3nLogSzLO3JMkPiuragt | ed25519
0xfdf3a56d8ac390499c611fd338036e3139a0e9a5 | AO6fjfh1RYv+NZq/BbtPhx9ZaSlD34nCzjFYGyWrhf1s | ed25519
```
2. Create a multisig address with 3 pks:
```
target/debug/sui keytool multi-sig-address --pks AgP6wdhblYJR3iQ8NJkIj2RxkUlKh5fLuzkEVAVLEaV+DQ== AQIO0r/XoOqhMf67kfG5Pl9sgvtl6F20c3s6YuyvtJnBHw== AAVfOhvhexjXkEf89dVN+H7lD83i1iyG9DsB3pBcPSLq --weights 1 2 3 --threshold 3
Multisig address: 0x959d27a75fced941de22caf8deb7b7499df3992b
Participating parties:
Sui Address | Public Key (Base64) | Weight
----------------------------------------------------------------------------------------------------
0x487998f81ffe67b97f6ff84e61f638291dd019e3 | AgP6wdhblYJR3iQ8NJkIj2RxkUlKh5fLuzkEVAVLEaV+DQ== | 1
0xa5f022cce499749a54ba59bf377cdaea369e7457 | AQIO0r/XoOqhMf67kfG5Pl9sgvtl6F20c3s6YuyvtJnBHw== | 2
0xaeb4c19379dee3edff0c2f67c9da4b346f41c6bd | AAVfOhvhexjXkEf89dVN+H7lD83i1iyG9DsB3pBcPSLq | 3
```
3. Send to this multisig address some gas
```
curl --location --request POST 'http://127.0.0.1:9123/gas' --header 'Content-Type: application/json' --data-raw "{ \"FixedAmountRequest\": { \"recipient\": \"0x959d27a75fced941de22caf8deb7b7499df3992b\" } }"
{"transferred_gas_objects":[{"amount":200000,"id":"0x38a8a91a84b108a4499fe5c0226a9e01d466e603","transfer_tx_digest":"9F4uVa95FjLfRc9i1QeA1t5NBsNX7caGdiuiiVVXxkjj"},{"amount":200000,"id":"0x42bf1424f5f2fac68d7b72c62a14a11349ea865a","transfer_tx_digest":"9F4uVa95FjLfRc9i1QeA1t5NBsNX7caGdiuiiVVXxkjj"},{"amount":200000,"id":"0x778c678d7cf237c1f82f72f033eb00a1c5c55836","transfer_tx_digest":"9F4uVa95FjLfRc9i1QeA1t5NBsNX7caGdiuiiVVXxkjj"},{"amount":200000,"id":"0xb746f9a98066c4115ceda4e857a46337d15aa9bb","transfer_tx_digest":"9F4uVa95FjLfRc9i1QeA1t5NBsNX7caGdiuiiVVXxkjj"},{"amount":200000,"id":"0xe2b9fbb09daa8baa2bcd191baaf5943351126647","transfer_tx_digest":"9F4uVa95FjLfRc9i1QeA1t5NBsNX7caGdiuiiVVXxkjj"}],"error":null}%
```
4. Serialize a transaction
```
target/debug/sui client serialize-transfer-sui --to 0x183ee5473ffecfc959d0c547a6198b94e3c2c971 --sui-coin-object-id 0xe2b9fbb09daa8baa2bcd191baaf5943351126647 --gas-budget 1000
Intent message to sign: AAAAAAMYPuVHP/7PyVnQxUemGYuU48LJcQCVnSenX87ZQd4iyvjet7dJnfOZK+K5+7CdqouqK80ZG6r1lDNREmZHAgAAAAAAAAAgPlSMs0YYDFvIEBZpv38kLVA5fo86sAG9gtvlZoWT56cBAAAAAAAAAOgDAAAAAAAA
Raw transaction to execute: AAMYPuVHP/7PyVnQxUemGYuU48LJcQCVnSenX87ZQd4iyvjet7dJnfOZK+K5+7CdqouqK80ZG6r1lDNREmZHAgAAAAAAAAAgPlSMs0YYDFvIEBZpv38kLVA5fo86sAG9gtvlZoWT56cBAAAAAAAAAOgDAAAAAAAA
```
5. Sign the intent message with two keys in keystore
```
target/debug/sui keytool sign --address 0x487998f81ffe67b97f6ff84e61f638291dd019e3 --data AAAAAAMYPuVHP/7PyVnQxUemGYuU48LJcQCVnSenX87ZQd4iyvjet7dJnfOZK+K5+7CdqouqK80ZG6r1lDNREmZHAgAAAAAAAAAgPlSMs0YYDFvIEBZpv38kLVA5fo86sAG9gtvlZoWT56cBAAAAAAAAAOgDAAAAAAAA
Intent message to sign: AAAAAAMYPuVHP/7PyVnQxUemGYuU48LJcQCVnSenX87ZQd4iyvjet7dJnfOZK+K5+7CdqouqK80ZG6r1lDNREmZHAgAAAAAAAAAgPlSMs0YYDFvIEBZpv38kLVA5fo86sAG9gtvlZoWT56cBAAAAAAAAAOgDAAAAAAAA
Signer address: 0x487998f81ffe67b97f6ff84e61f638291dd019e3
Serialized signature (`flag || sig || pk` in Base64): "AtHVVgdkiEJHlZed3AuzTzmkyMhfU3g/h6PUXxOMtQC/Uus0vst37NKfe8yTZy0wDlvO8gIRXhDpPA+Ftpa9+z4D+sHYW5WCUd4kPDSZCI9kcZFJSoeXy7s5BFQFSxGlfg0="
target/debug/sui keytool sign --address 0xa5f022cce499749a54ba59bf377cdaea369e7457 --data AAAAAAMYPuVHP/7PyVnQxUemGYuU48LJcQCVnSenX87ZQd4iyvjet7dJnfOZK+K5+7CdqouqK80ZG6r1lDNREmZHAgAAAAAAAAAgPlSMs0YYDFvIEBZpv38kLVA5fo86sAG9gtvlZoWT56cBAAAAAAAAAOgDAAAAAAAA
Intent message to sign: AAAAAAMYPuVHP/7PyVnQxUemGYuU48LJcQCVnSenX87ZQd4iyvjet7dJnfOZK+K5+7CdqouqK80ZG6r1lDNREmZHAgAAAAAAAAAgPlSMs0YYDFvIEBZpv38kLVA5fo86sAG9gtvlZoWT56cBAAAAAAAAAOgDAAAAAAAA
Signer address: 0xa5f022cce499749a54ba59bf377cdaea369e7457
Serialized signature (`flag || sig || pk` in Base64): "AYA6X2BoJUtc00uvnnrPuWJ/tLMICZuBFIUk6+ZGl5HwMK7+B/pA+GLdLUBOuo7Qut9xSNH6IrOrW3wTk6rURa0CDtK/16DqoTH+u5HxuT5fbIL7ZehdtHN7OmLsr7SZwR8="
```
6. Combine 2 sigs into 1 multisig
```
target/debug/sui keytool multi-sig-combine-partial-sig --pks AgP6wdhblYJR3iQ8NJkIj2RxkUlKh5fLuzkEVAVLEaV+DQ== AQIO0r/XoOqhMf67kfG5Pl9sgvtl6F20c3s6YuyvtJnBHw== AAVfOhvhexjXkEf89dVN+H7lD83i1iyG9DsB3pBcPSLq --weights 1 2 3 --threshold 3 --sigs AtHVVgdkiEJHlZed3AuzTzmkyMhfU3g/h6PUXxOMtQC/Uus0vst37NKfe8yTZy0wDlvO8gIRXhDpPA+Ftpa9+z4D+sHYW5WCUd4kPDSZCI9kcZFJSoeXy7s5BFQFSxGlfg0= AYA6X2BoJUtc00uvnnrPuWJ/tLMICZuBFIUk6+ZGl5HwMK7+B/pA+GLdLUBOuo7Qut9xSNH6IrOrW3wTk6rURa0CDtK/16DqoTH+u5HxuT5fbIL7ZehdtHN7OmLsr7SZwR8=
Multisig address: 0x959d27a75fced941de22caf8deb7b7499df3992b
Multisig parsed: MultiSignature(MultiSignature { sigs: [Secp256r1(Secp256r1Signature { sig: ecdsa::Signature<NistP256>(D1D556076488424795979DDC0BB34F39A4C8C85F53783F87A3D45F138CB500BF52EB34BECB77ECD29F7BCC93672D300E5BCEF202115E10E93C0F85B696BDFB3E), bytes: OnceCell(Uninit) }), Secp256k1(Secp256k1Signature { sig: 3045022100803a5f6068254b5cd34baf9e7acfb9627fb4b308099b81148524ebe6469791f0022030aefe07fa40f862dd2d404eba8ed0badf7148d1fa22b3ab5b7c1393aad445ad, bytes: OnceCell(Uninit) })], bitmap: RoaringBitmap<[0, 1]>, multi_pk: MultiPublicKey { pk_map: [("AgP6wdhblYJR3iQ8NJkIj2RxkUlKh5fLuzkEVAVLEaV+DQ==", 1), ("AQIO0r/XoOqhMf67kfG5Pl9sgvtl6F20c3s6YuyvtJnBHw==", 2), ("AAVfOhvhexjXkEf89dVN+H7lD83i1iyG9DsB3pBcPSLq", 3)], threshold: 3 }, bytes: OnceCell(Uninit) })
Multisig serialized: "AwIC0dVWB2SIQkeVl53cC7NPOaTIyF9TeD+Ho9RfE4y1AL9S6zS+y3fs0p97zJNnLTAOW87yAhFeEOk8D4W2lr37PgGAOl9gaCVLXNNLr556z7lif7SzCAmbgRSFJOvmRpeR8DCu/gf6QPhi3S1ATrqO0LrfcUjR+iKzq1t8E5Oq1EWtFDowAAABAAAAAAABABAAAAAAAAEAAzBBZ1A2d2RoYmxZSlIzaVE4TkprSWoyUnhrVWxLaDVmTHV6a0VWQVZMRWFWK0RRPT0BMEFRSU8wci9Yb09xaE1mNjdrZkc1UGw5c2d2dGw2RjIwYzNzNll1eXZ0Sm5CSHc9PQIsQUFWZk9odmhleGpYa0VmODlkVk4rSDdsRDgzaTFpeUc5RHNCM3BCY1BTTHEDAwA="
```
7. Execute the multisig
```
target/debug/sui client execute-signed-tx --tx-bytes AAMYPuVHP/7PyVnQxUemGYuU48LJcQCVnSenX87ZQd4iyvjet7dJnfOZK+K5+7CdqouqK80ZG6r1lDNREmZHAgAAAAAAAAAgPlSMs0YYDFvIEBZpv38kLVA5fo86sAG9gtvlZoWT56cBAAAAAAAAAOgDAAAAAAAA --signature AwIC0dVWB2SIQkeVl53cC7NPOaTIyF9TeD+Ho9RfE4y1AL9S6zS+y3fs0p97zJNnLTAOW87yAhFeEOk8D4W2lr37PgGAOl9gaCVLXNNLr556z7lif7SzCAmbgRSFJOvmRpeR8DCu/gf6QPhi3S1ATrqO0LrfcUjR+iKzq1t8E5Oq1EWtFDowAAABAAAAAAABABAAAAAAAAEAAzBBZ1A2d2RoYmxZSlIzaVE4TkprSWoyUnhrVWxLaDVmTHV6a0VWQVZMRWFWK0RRPT0BMEFRSU8wci9Yb09xaE1mNjdrZkc1UGw5c2d2dGw2RjIwYzNzNll1eXZ0Sm5CSHc9PQIsQUFWZk9odmhleGpYa0VmODlkVk4rSDdsRDgzaTFpeUc5RHNCM3BCY1BTTHEDAwA=
----- Certificate ----
Transaction Hash: AexDUXBRW5fLtuVxffuKqJqxBLvSVcTLzzPt8SSrv75F
Transaction Signature: MultiSignature(MultiSignature { sigs: [Secp256r1(Secp256r1Signature { sig: ecdsa::Signature<NistP256>(D1D556076488424795979DDC0BB34F39A4C8C85F53783F87A3D45F138CB500BF52EB34BECB77ECD29F7BCC93672D300E5BCEF202115E10E93C0F85B696BDFB3E), bytes: OnceCell(Uninit) }), Secp256k1(Secp256k1Signature { sig: 3045022100803a5f6068254b5cd34baf9e7acfb9627fb4b308099b81148524ebe6469791f0022030aefe07fa40f862dd2d404eba8ed0badf7148d1fa22b3ab5b7c1393aad445ad, bytes: OnceCell(Uninit) })], bitmap: RoaringBitmap<[0, 1]>, multi_pk: MultiPublicKey { pk_map: [("AgP6wdhblYJR3iQ8NJkIj2RxkUlKh5fLuzkEVAVLEaV+DQ==", 1), ("AQIO0r/XoOqhMf67kfG5Pl9sgvtl6F20c3s6YuyvtJnBHw==", 2), ("AAVfOhvhexjXkEf89dVN+H7lD83i1iyG9DsB3pBcPSLq", 3)], threshold: 3 }, bytes: OnceCell(Uninit) })
Signed Authorities Bitmap: RoaringBitmap<[1, 2, 3]>
Transaction Kind : Transfer SUI
Recipient : 0x183ee5473ffecfc959d0c547a6198b94e3c2c971
Amount: Full Balance
Sender: 0x959d27a75fced941de22caf8deb7b7499df3992b
Gas Payment: Object ID: 0xe2b9fbb09daa8baa2bcd191baaf5943351126647, version: 0x2, digest: 0x3e548cb346180c5bc8101669bf7f242d50397e8f3ab001bd82dbe5668593e7a7
Gas Price: 1
Gas Budget: 1000
----- Transaction Effects ----
Status : Success
Mutated Objects:
- ID: 0xe2b9fbb09daa8baa2bcd191baaf5943351126647 , Owner: Account Address ( 0x183ee5473ffecfc959d0c547a6198b94e3c2c971 )
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment