run-dao-test.sh 4.0 KB

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