Skip to content

Instantly share code, notes, and snippets.

@lispc
Last active April 3, 2019 07:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lispc/d4fa2b6acb754f5da859894b3a4af823 to your computer and use it in GitHub Desktop.
Save lispc/d4fa2b6acb754f5da859894b3a4af823 to your computer and use it in GitHub Desktop.
multi sig demo for IOST
set -eu
pubkey1=2ott3o9CZcaoZCe4nGYo1azEfEpY4W771GBFe133WW1p
seckey1=3MWryACc5nSxRDJCJLe9Xq2spR1j7d5wYbZ4pZN4SvfgUxhG497DQxo5ahENoCnDkLsc7haSveP1q1zkt26JWhog
pubkey2=G7Zy3ctcByrWfzCzkijnmPXm2rxjQruttFg9FH3hJSMw
seckey2=3NdYa9gCfsRpJMzQZWXfLhKegA4kpyKjYpDLxSCv3hnSX4homFS5T91guU6TGasmrU4Cei9WsNn3hA1cFHZnxKtm
pubkey3=D4WgA3Q9EV18S78haqYpdBqJZT3TNCgkraczi8PK4TVE
seckey3=4RQrGu6ZdKdNP21jQpbMjLMRGdhSemZf1xQXVsm6wJztmWXAm828qhmae6SoQjTU1H64box1Ha2cJgTDntj7Ud2
pubkey4=HiE2gyeFeSoWzurFTWdFnNLizuigh93Jh97HisnQ2see
seckey4=3zXxqsvNTfcB3Ah9JCyX2mqYxRmMoGGu7i1jEnykkoc58ikGo6eoDXJTqpn8Yabt5mGkGd51atkzVafFyeTgwp6i
rm -f seckey*
echo -n $seckey2 > seckey2_ed25519
echo -n $seckey3 > seckey3_ed25519
echo -n $seckey4 > seckey4_ed25519
chmod 0400 seckey*
TEST_USER_ID="myname"
GROUP="group"
function init_account() {
iwallet account import $TEST_USER_ID $seckey1
iwallet --account admin account create $TEST_USER_ID --owner $pubkey1 --active $pubkey1 --initial_balance 20 --initial_ram 20000 --initial_gas_pledge 200
iwallet --account $TEST_USER_ID call auth.iost addGroup [\"$TEST_USER_ID\",\"$GROUP\"] \
auth.iost assignGroup \[\"$TEST_USER_ID\",\"$GROUP\",\"$pubkey2\",34\] \
auth.iost assignGroup \[\"$TEST_USER_ID\",\"$GROUP\",\"$pubkey3\",34\] \
auth.iost assignGroup \[\"$TEST_USER_ID\",\"$GROUP\",\"$pubkey4\",34\] \
auth.iost assignPermissionToGroup [\"$TEST_USER_ID\",\"active\",\"$GROUP\"] \
auth.iost assignPermissionToGroup [\"$TEST_USER_ID\",\"owner\",\"$GROUP\"] \
auth.iost revokePermission [\"$TEST_USER_ID\",\"active\",\"$pubkey1\"] \
auth.iost revokePermission [\"$TEST_USER_ID\",\"owner\",\"$pubkey1\"]
}
function test_singlesig_fail() {
iwallet --account $TEST_USER_ID call token.iost transfer [\"iost\",\"$TEST_USER_ID\",\"admin\",\"10\",\"\"] && (echo "should fail, but succeed"; exit 1) || echo "command failed as expected"
}
function test_multisig_usage1() {
iwallet --account $TEST_USER_ID call --sign_key_files seckey2_ed25519,seckey3_ed25519,seckey4_ed25519 --as_publisher_sign token.iost transfer [\"iost\",\"$TEST_USER_ID\",\"admin\",\"10\",\"\"] || (echo "should succeed, but fail"; exit 1)
}
function test_multisig_usage2() {
timeStr=`date +%Y-%m-%dT%H:%M:%S%z|sed 's#00$#:00#'`
actionStr="[\"iost\",\"$TEST_USER_ID\",\"admin\",\"10\",\"\"]"
txStr="--tx_time $timeStr token.iost transfer $actionStr"
txFile="tx.json"
iwallet call --output $txFile $txStr
iwallet sign --as_publisher_sign $txFile seckey2_ed25519 sig2
iwallet sign --as_publisher_sign $txFile seckey3_ed25519 sig3
iwallet sign --as_publisher_sign $txFile seckey4_ed25519 sig4
iwallet --account $TEST_USER_ID send --signature_files sig2,sig3,sig4 --as_publisher_sign $txFile || (echo "should succeed, but fail"; exit 1)
}
init_account
test_multisig_usage1
test_multisig_usage2
test_singlesig_fail
echo "multisig test succeed!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment