run-dao-test.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #!/bin/sh
  2. set -e
  3. set -x
  4. # Path to `drk` binary
  5. DRK="../../../drk -c drk.toml"
  6. # Script configuration
  7. OUTPUT_FOLDER=/tmp/darkfi
  8. mkdir -p $OUTPUT_FOLDER
  9. SLEEP_TIME=5
  10. # First run the darkfid node and the miner:
  11. #
  12. # ./clean.sh
  13. # ./init-wallet.sh
  14. # ./tmux_sessions.sh
  15. #
  16. # Now you can run this script
  17. mint_token() {
  18. $DRK alias add $1 "$($DRK token generate-mint | awk '{print $8}')"
  19. $DRK token mint $1 $2 "$($DRK wallet address)" | tee $OUTPUT_FOLDER/mint-$1.tx | $DRK broadcast
  20. $DRK token list
  21. }
  22. token_balance() {
  23. BALANCE="$($DRK wallet balance 2>/dev/null)"
  24. # No tokens received at all yet
  25. if echo "$BALANCE" | grep -q "No unspent balances found"; then
  26. echo 0
  27. return
  28. fi
  29. BALANCE="$(echo "$BALANCE" | grep -q "$1")"
  30. # Not received yet so no entry
  31. if [ $? = 1 ]; then
  32. echo 0
  33. return
  34. fi
  35. # OK we have the token, show the actual balance
  36. echo "$BALANCE" | awk '{print $5}'
  37. }
  38. wait_token() {
  39. while [ "$(token_balance $1)" = 0 ]; do
  40. sleep $SLEEP_TIME
  41. sh ./sync-wallet.sh > /dev/null
  42. done
  43. }
  44. mint_dao() {
  45. $DRK dao create 20 10 10 0.67 ANON > $OUTPUT_FOLDER/dao.toml
  46. $DRK dao import AnonDAO < $OUTPUT_FOLDER/dao.toml
  47. $DRK dao list
  48. $DRK dao list AnonDAO
  49. $DRK dao mint AnonDAO | tee $OUTPUT_FOLDER/dao-mint.tx | $DRK broadcast
  50. }
  51. wait_dao_mint() {
  52. while [ "$($DRK dao list AnonDAO | grep '^Transaction hash: ' | awk '{print $3}')" = None ]; do
  53. sleep $SLEEP_TIME
  54. sh ./sync-wallet.sh > /dev/null
  55. done
  56. }
  57. fill_treasury() {
  58. PUBKEY="$($DRK dao list AnonDAO | grep '^Notes Public key: ' | cut -d ' ' -f4)"
  59. SPEND_HOOK="$($DRK dao spend-hook)"
  60. BULLA="$($DRK dao list AnonDAO | grep '^Bulla: ' | cut -d' ' -f2)"
  61. $DRK transfer 20 DAWN "$PUBKEY" "$SPEND_HOOK" "$BULLA" | tee $OUTPUT_FOLDER/xfer.tx | $DRK broadcast
  62. }
  63. dao_balance() {
  64. BALANCE=$($DRK dao balance AnonDAO 2>/dev/null)
  65. # No tokens received at all yet
  66. if echo "$BALANCE" | grep -q "No unspent balances found"; then
  67. echo 0
  68. return
  69. fi
  70. BALANCE=$(echo "$BALANCE" | grep "$1")
  71. # Not received yet so no entry
  72. if [ $? = 1 ]; then
  73. echo 0
  74. return
  75. fi
  76. # OK we have the token, show the actual balance
  77. echo "$BALANCE" | awk '{print $5}'
  78. }
  79. wait_dao_treasury() {
  80. while [ "$(dao_balance DAWN)" = 0 ]; do
  81. sleep $SLEEP_TIME
  82. sh ./sync-wallet.sh > /dev/null
  83. done
  84. }
  85. propose() {
  86. MY_ADDR=$($DRK wallet address)
  87. PROPOSAL="$($DRK dao propose-transfer AnonDAO 1 5 DAWN "$MY_ADDR" | cut -d' ' -f3)"
  88. $DRK dao proposal "$PROPOSAL" --mint-proposal | tee $OUTPUT_FOLDER/propose.tx | $DRK broadcast
  89. }
  90. wait_proposal() {
  91. PROPOSAL="$($DRK dao proposals AnonDAO | cut -d' ' -f2)"
  92. while [ "$($DRK dao proposal $PROPOSAL | grep '^Proposal transaction hash: ' | awk '{print $4}')" = None ]; do
  93. sleep $SLEEP_TIME
  94. sh ./sync-wallet.sh > /dev/null
  95. done
  96. }
  97. vote() {
  98. PROPOSAL="$($DRK dao proposals AnonDAO | cut -d' ' -f2)"
  99. $DRK dao vote "$PROPOSAL" 1 | tee $OUTPUT_FOLDER/dao-vote.tx | $DRK broadcast
  100. }
  101. wait_vote() {
  102. PROPOSAL="$($DRK dao proposals AnonDAO | cut -d' ' -f2)"
  103. while [ "$($DRK dao proposal $PROPOSAL | grep '^Current proposal outcome: ' | awk '{print $4}')" != "Approved" ]; do
  104. sleep $SLEEP_TIME
  105. sh ./sync-wallet.sh > /dev/null
  106. done
  107. }
  108. do_exec() {
  109. PROPOSAL="$($DRK dao proposals AnonDAO | cut -d' ' -f2)"
  110. $DRK dao exec --early $PROPOSAL | tee $OUTPUT_FOLDER/dao-exec.tx | $DRK broadcast
  111. }
  112. wait_exec() {
  113. PROPOSAL="$($DRK dao proposals AnonDAO | cut -d' ' -f2)"
  114. while [ -z "$($DRK dao proposal $PROPOSAL | grep '^Proposal was executed on transaction: ')" ]; do
  115. sleep $SLEEP_TIME
  116. sh ./sync-wallet.sh > /dev/null
  117. done
  118. }
  119. wait_token DRK
  120. mint_token ANON 42
  121. wait_token ANON
  122. mint_token DAWN 20
  123. wait_token DAWN
  124. mint_dao
  125. wait_dao_mint
  126. fill_treasury
  127. wait_dao_treasury
  128. propose
  129. wait_proposal
  130. vote
  131. wait_vote
  132. do_exec
  133. wait_exec