decred.org/dcrdex@v1.0.5/dex/testing/polygon/harness.sh (about)

     1  #!/usr/bin/env bash
     2  
     3  SESSION="polygon-harness"
     4  
     5  NODES_ROOT=~/dextest/polygon
     6  GENESIS_JSON_FILE_LOCATION="${NODES_ROOT}/genesis.json"
     7  HARNESS_DIR="${NODES_ROOT}/harness-ctl"
     8  PASSWORD="abc"
     9  
    10  if [ -d "${NODES_ROOT}" ]; then
    11    rm -R "${NODES_ROOT}"
    12  fi
    13  
    14  mkdir -p "${HARNESS_DIR}"
    15  
    16  # Shutdown script
    17  cat > "${HARNESS_DIR}/quit" <<EOF
    18  #!/usr/bin/env bash
    19  tmux send-keys -t $SESSION:1 C-c
    20  tmux send-keys -t $SESSION:2 C-c
    21  tmux kill-session
    22  EOF
    23  chmod +x "${HARNESS_DIR}/quit"
    24  
    25  CHAIN_ADDRESS="dbb75441459257a919c94426033af44286306739"
    26  CHAIN_ADDRESS_JSON_FILE_NAME="UTC--2023-06-19T10-15-10.217011000Z--dbb75441459257a919c94426033af44286306739"
    27  CHAIN_ADDRESS_JSON='{"address":"dbb75441459257a919c94426033af44286306739","crypto":{"cipher":"aes-128-ctr","ciphertext":"342d44548474bab8654c09c1728ad22c38b1860437ea1083a87debc7233ad5e7","cipherparams":{"iv":"ccf56516614d4ea6bb1ea1cb4d1dcc9d"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"86e92faa7a88fce7fd4f60da6dd45e7b6754e5ff0bbda3afd27a4c54d6a64277"},"mac":"3ede3b539042c7936fea5c9d5da7f6276d565679a34d58014f8afe59be09e1f1"},"id":"49ddfe5e-0f43-40f7-9124-812a95806f2c","version":3}'
    28  
    29  ALPHA_ADDRESS="18d65fb8d60c1199bb1ad381be47aa692b482605"
    30  ALPHA_ADDRESS_JSON_FILE_NAME="UTC--2021-01-28T08-47-02.993754951Z--18d65fb8d60c1199bb1ad381be47aa692b482605"
    31  ALPHA_ADDRESS_JSON='{"address":"18d65fb8d60c1199bb1ad381be47aa692b482605","crypto":{"cipher":"aes-128-ctr","ciphertext":"927bc2432492fc4bbe9acfe0042f5cd2cef25aff251ac1fb2f420ee85e3b6ee4","cipherparams":{"iv":"89e7333535aed5284abd52f841d30c95"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"6fe29ea59d166989be533da62d79802a6b0cef26a9766fa363c7a4bb4c263b5f"},"mac":"c7e2b6c4538c373b2c4e0be7b343db618d39cc68fa872909059357ff36743ca0"},"id":"0e2b9cef-d659-4a26-8739-879129ed0b63","version":3}'
    32  ALPHA_NODE_KEY="71d810d39333296b518c846a3e49eca55f998fd7994998bb3e5048567f2f073c"
    33  ALPHA_ENODE="897c84f6e4f18195413c1d02927e6a4093f5e7574b52bdec6f20844c4f1f6dd3f16036a9e600bd8681ab50fd8dd144df4a6ba9dd8722bb578a86aaa8222c964f"
    34  ALPHA_NODE_PORT="21547"
    35  ALPHA_AUTHRPC_PORT="61829"
    36  ALPHA_HTTP_PORT="48296"
    37  ALPHA_WS_PORT="34983"
    38  ALPHA_GRPC_PORT="34984"
    39  
    40  BETA_ADDRESS="4f8ef3892b65ed7fc356ff473a2ef2ae5ec27a06"
    41  BETA_ADDRESS_JSON_FILE_NAME="UTC--2021-01-27T08-20-58.179642501Z--4f8ef3892b65ed7fc356ff473a2ef2ae5ec27a06"
    42  BETA_ADDRESS_JSON='{"address":"4f8ef3892b65ed7fc356ff473a2ef2ae5ec27a06","crypto":{"cipher":"aes-128-ctr","ciphertext":"c5672bb829df9e209ca8ce18dbdd1fed69c603d639e06ab09127b672a609c121","cipherparams":{"iv":"24460eb2934c8b61cee3ad0aa7b843c0"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"1f85da881994ca7b4a23f0698da70500a4b79f97a4450b83b129ebf3b4c28f50"},"mac":"1ecea707f1bffa1f6f944cb47e83118d8179e8a5005b83c88610b7e8692a1197"},"id":"56633762-6fb1-4cbf-8396-3a2e4661f7d4","version":3}'
    43  BETA_NODE_KEY="0f3f23a0f14202da009bd59a96457098acea901986629e54d5be1eea32fc404a"
    44  BETA_ENODE="b1d3e358ee5c9b268e911f2cab47bc12d0e65c80a6d2b453fece34facc9ac3caed14aa3bc7578166bb08c5bc9719e5a2267ae14e0b42da393f4d86f6d5829061"
    45  BETA_NODE_PORT="21548"
    46  BETA_AUTHRPC_PORT="61830"
    47  BETA_HTTP_PORT="48297"
    48  BETA_WS_PORT="34985"
    49  BETA_GRPC_PORT="34986"
    50  
    51  ETH_SWAP_V0="608060405234801561001057600080fd5b50610b7a806100206000396000f3fe6080604052600436106100555760003560e01c80637249fbb61461005a57806376467cbd1461007c578063a8793f94146100b2578063d0f761c0146100c5578063eb84e7f2146100f5578063f4fd17f914610171575b600080fd5b34801561006657600080fd5b5061007a610075366004610871565b610191565b005b34801561008857600080fd5b5061009c610097366004610871565b6102c9565b6040516100a991906108c2565b60405180910390f35b61007a6100c0366004610927565b6103a4565b3480156100d157600080fd5b506100e56100e0366004610871565b61059b565b60405190151581526020016100a9565b34801561010157600080fd5b5061015e610110366004610871565b60006020819052908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b0391821691811690600160a01b900460ff1687565b6040516100a9979695949392919061099c565b34801561017d57600080fd5b5061007a61018c3660046109e8565b6105e3565b3233146101b95760405162461bcd60e51b81526004016101b090610a4b565b60405180910390fd5b6101c28161059b565b6101ff5760405162461bcd60e51b815260206004820152600e60248201526d6e6f7420726566756e6461626c6560901b60448201526064016101b0565b60008181526020819052604080822060058101805460ff60a01b1916600360a01b1790556004810154600182015492519193926001600160a01b03909116918381818185875af1925050503d8060008114610276576040519150601f19603f3d011682016040523d82523d6000602084013e61027b565b606091505b50909150506001811515146102c45760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b60448201526064016101b0565b505050565b6103066040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b60008281526020818152604091829020825160e08101845281548152600182015492810192909252600281015492820192909252600380830154606083015260048301546001600160a01b039081166080840152600584015490811660a084015291929160c0840191600160a01b90910460ff169081111561038a5761038a61088a565b600381111561039b5761039b61088a565b90525092915050565b3233146103c35760405162461bcd60e51b81526004016101b090610a4b565b6000805b8281101561056157368484838181106103e2576103e2610a75565b9050608002019050600080600083602001358152602001908152602001600020905060008260600135116104405760405162461bcd60e51b81526020600482015260056024820152640c081d985b60da1b60448201526064016101b0565b81356104825760405162461bcd60e51b815260206004820152601160248201527003020726566756e6454696d657374616d7607c1b60448201526064016101b0565b60006005820154600160a01b900460ff1660038111156104a4576104a461088a565b146104dc5760405162461bcd60e51b8152602060048201526008602482015267064757020737761760c41b60448201526064016101b0565b436002820155813560038201556004810180546001600160a01b0319163317905561050d6060830160408401610a8b565b6005820180546060850135600185018190556001600160a01b03939093166001600160a81b031990911617600160a01b17905561054a9085610aca565b93505050808061055990610ae3565b9150506103c7565b503481146102c45760405162461bcd60e51b8152602060048201526007602482015266189859081d985b60ca1b60448201526064016101b0565b600081815260208190526040812060016005820154600160a01b900460ff1660038111156105cb576105cb61088a565b1480156105dc575080600301544210155b9392505050565b3233146106025760405162461bcd60e51b81526004016101b090610a4b565b6000805b828110156107da573684848381811061062157610621610a75565b6020604091820293909301838101356000908152938490529220919250600190506005820154600160a01b900460ff1660038111156106625761066261088a565b1461069b5760405162461bcd60e51b815260206004820152600960248201526862616420737461746560b81b60448201526064016101b0565b60058101546001600160a01b031633146106e95760405162461bcd60e51b815260206004820152600f60248201526e189859081c185c9d1a58da5c185b9d608a1b60448201526064016101b0565b81602001356002836000013560405160200161070791815260200190565b60408051601f198184030181529082905261072191610afc565b602060405180830381855afa15801561073e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107619190610b2b565b1461079b5760405162461bcd60e51b815260206004820152600a602482015269189859081cd958dc995d60b21b60448201526064016101b0565b60058101805460ff60a01b1916600160a11b1790558135815560018101546107c39085610aca565b9350505080806107d290610ae3565b915050610606565b50604051600090339083908381818185875af1925050503d806000811461081d576040519150601f19603f3d011682016040523d82523d6000602084013e610822565b606091505b509091505060018115151461086b5760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b60448201526064016101b0565b50505050565b60006020828403121561088357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600481106108be57634e487b7160e01b600052602160045260246000fd5b9052565b600060e08201905082518252602083015160208301526040830151604083015260608301516060830152608083015160018060a01b0380821660808501528060a08601511660a0850152505060c083015161092060c08401826108a0565b5092915050565b6000806020838503121561093a57600080fd5b823567ffffffffffffffff8082111561095257600080fd5b818501915085601f83011261096657600080fd5b81358181111561097557600080fd5b8660208260071b850101111561098a57600080fd5b60209290920196919550909350505050565b8781526020810187905260408101869052606081018590526001600160a01b038481166080830152831660a082015260e081016109dc60c08301846108a0565b98975050505050505050565b600080602083850312156109fb57600080fd5b823567ffffffffffffffff80821115610a1357600080fd5b818501915085601f830112610a2757600080fd5b813581811115610a3657600080fd5b8660208260061b850101111561098a57600080fd5b60208082526010908201526f39b2b73232b910109e9037b934b3b4b760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610a9d57600080fd5b81356001600160a01b03811681146105dc57600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610add57610add610ab4565b92915050565b600060018201610af557610af5610ab4565b5060010190565b6000825160005b81811015610b1d5760208186018101518583015201610b03565b506000920191825250919050565b600060208284031215610b3d57600080fd5b505191905056fea2646970667358221220d288c9a18362adf67607179f5c8585d0abe014bdb904b6e878451ac0c393a04364736f6c63430008120033"
    52  ERC20_SWAP_V0="60a060405234801561001057600080fd5b50604051610e92380380610e9283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610df361009f6000396000818160c50152818161029b0152818161066b01526109f30152610df36000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a8793f941161005b578063a8793f94146100ff578063d0f761c014610112578063eb84e7f214610135578063f4fd17f9146101a457600080fd5b80637249fbb61461008257806376467cbd146100975780638c8e8fee146100c0575b600080fd5b610095610090366004610ac8565b6101b7565b005b6100aa6100a5366004610ac8565b610376565b6040516100b79190610b19565b60405180910390f35b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b7565b61009561010d366004610b7e565b610451565b610125610120366004610ac8565b61074c565b60405190151581526020016100b7565b610191610143366004610ac8565b60006020819052908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b0391821691811690600160a01b900460ff1687565b6040516100b79796959493929190610bf3565b6100956101b2366004610c3f565b6107ac565b3233146101df5760405162461bcd60e51b81526004016101d690610ca2565b60405180910390fd5b6101e88161074c565b6102255760405162461bcd60e51b815260206004820152600e60248201526d6e6f7420726566756e6461626c6560901b60448201526064016101d6565b60008181526020818152604080832060058101805460ff60a01b1916600360a01b17905560018101548251336024820152604480820192909252835180820390920182526064018352928301805163a9059cbb60e01b6001600160e01b0390911617905290519092916060916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916102c591610ccc565b6000604051808303816000865af19150503d8060008114610302576040519150601f19603f3d011682016040523d82523d6000602084013e610307565b606091505b5090925090508180156103325750805115806103325750808060200190518101906103329190610cfb565b6103705760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b60448201526064016101d6565b50505050565b6103b36040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b60008281526020818152604091829020825160e08101845281548152600182015492810192909252600281015492820192909252600380830154606083015260048301546001600160a01b039081166080840152600584015490811660a084015291929160c0840191600160a01b90910460ff169081111561043757610437610ae1565b600381111561044857610448610ae1565b90525092915050565b3233146104705760405162461bcd60e51b81526004016101d690610ca2565b6000805b82811015610615573684848381811061048f5761048f610d1d565b9050608002019050600080600083602001358152602001908152602001600020905060008260600135116104ed5760405162461bcd60e51b81526020600482015260056024820152640c081d985b60da1b60448201526064016101d6565b813561052f5760405162461bcd60e51b815260206004820152601160248201527003020726566756e6454696d657374616d7607c1b60448201526064016101d6565b60006005820154600160a01b900460ff16600381111561055157610551610ae1565b146105905760405162461bcd60e51b815260206004820152600f60248201526e0c8eae040e6cac6e4cae840d0c2e6d608b1b60448201526064016101d6565b436002820155813560038201556004810180546001600160a01b031916331790556105c16060830160408401610d33565b6005820180546060850135600185018190556001600160a01b03939093166001600160a81b031990911617600160a01b1790556105fe9085610d72565b93505050808061060d90610d8b565b915050610474565b5060408051336024820152306044820152606480820184905282518083039091018152608490910182526020810180516001600160e01b03166323b872dd60e01b17905290516000916060916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169161069591610ccc565b6000604051808303816000865af19150503d80600081146106d2576040519150601f19603f3d011682016040523d82523d6000602084013e6106d7565b606091505b5090925090508180156107025750805115806107025750808060200190518101906107029190610cfb565b6107455760405162461bcd60e51b81526020600482015260146024820152731d1c985b9cd9995c88199c9bdb4819985a5b195960621b60448201526064016101d6565b5050505050565b600081815260208190526040812060016005820154600160a01b900460ff16600381111561077c5761077c610ae1565b148015610795575060048101546001600160a01b031633145b80156107a5575080600301544210155b9392505050565b3233146107cb5760405162461bcd60e51b81526004016101d690610ca2565b6000805b828110156109a357368484838181106107ea576107ea610d1d565b6020604091820293909301838101356000908152938490529220919250600190506005820154600160a01b900460ff16600381111561082b5761082b610ae1565b146108645760405162461bcd60e51b815260206004820152600960248201526862616420737461746560b81b60448201526064016101d6565b60058101546001600160a01b031633146108b25760405162461bcd60e51b815260206004820152600f60248201526e189859081c185c9d1a58da5c185b9d608a1b60448201526064016101d6565b8160200135600283600001356040516020016108d091815260200190565b60408051601f19818403018152908290526108ea91610ccc565b602060405180830381855afa158015610907573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061092a9190610da4565b146109645760405162461bcd60e51b815260206004820152600a602482015269189859081cd958dc995d60b21b60448201526064016101d6565b60058101805460ff60a01b1916600160a11b17905581358155600181015461098c9085610d72565b93505050808061099b90610d8b565b9150506107cf565b5060408051336024820152604480820184905282518083039091018152606490910182526020810180516001600160e01b031663a9059cbb60e01b17905290516000916060916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691610a1d91610ccc565b6000604051808303816000865af19150503d8060008114610a5a576040519150601f19603f3d011682016040523d82523d6000602084013e610a5f565b606091505b509092509050818015610a8a575080511580610a8a575080806020019051810190610a8a9190610cfb565b6107455760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b60448201526064016101d6565b600060208284031215610ada57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60048110610b1557634e487b7160e01b600052602160045260246000fd5b9052565b600060e08201905082518252602083015160208301526040830151604083015260608301516060830152608083015160018060a01b0380821660808501528060a08601511660a0850152505060c0830151610b7760c0840182610af7565b5092915050565b60008060208385031215610b9157600080fd5b823567ffffffffffffffff80821115610ba957600080fd5b818501915085601f830112610bbd57600080fd5b813581811115610bcc57600080fd5b8660208260071b8501011115610be157600080fd5b60209290920196919550909350505050565b8781526020810187905260408101869052606081018590526001600160a01b038481166080830152831660a082015260e08101610c3360c0830184610af7565b98975050505050505050565b60008060208385031215610c5257600080fd5b823567ffffffffffffffff80821115610c6a57600080fd5b818501915085601f830112610c7e57600080fd5b813581811115610c8d57600080fd5b8660208260061b8501011115610be157600080fd5b60208082526010908201526f39b2b73232b910109e9037b934b3b4b760811b604082015260600190565b6000825160005b81811015610ced5760208186018101518583015201610cd3565b506000920191825250919050565b600060208284031215610d0d57600080fd5b815180151581146107a557600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215610d4557600080fd5b81356001600160a01b03811681146107a557600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610d8557610d85610d5c565b92915050565b600060018201610d9d57610d9d610d5c565b5060010190565b600060208284031215610db657600080fd5b505191905056fea2646970667358221220a055a4890a5ecf3876dbee91dfbeb46ba11b5f7c09b6d935173932d93f8fb92264736f6c63430008120033"
    53  TEST_TOKEN="608060405234801561001057600080fd5b50604051610aec380380610aec83398101604081905261002f91610140565b6040805180820190915260098152682a32b9ba2a37b5b2b760b91b602082015260039061005c9082610209565b506040805180820190915260038152621514d560ea1b60208201526004906100849082610209565b506005805460ff191660ff929092169190911790556909513ea9de0243800000600255600060208190526902544faa778090e000007f7d4921c2bc32c0110a31d16f4efb43c7a1228f1df7af765f608241dee5c62ebc8190557f59603491850c7d11499afe95b334ccfd92b48b36a15df31ef59ff5813fe3708281905573d12ab7cf72ccf1f3882ec99ddc53cd415635c3be9091527f5bd8dfce2dbb581d0922a094c40bab2f7d2f0ea9aaf275bf0fcc0f027a2ff91d556102c8565b60006020828403121561015257600080fd5b815160ff8116811461016357600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061019457607f821691505b6020821081036101b457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561020457600081815260208120601f850160051c810160208610156101e15750805b601f850160051c820191505b81811015610200578281556001016101ed565b5050505b505050565b81516001600160401b038111156102225761022261016a565b610236816102308454610180565b846101ba565b602080601f83116001811461026b57600084156102535750858301515b600019600386901b1c1916600185901b178555610200565b600085815260208120601f198616915b8281101561029a5788860151825594840194600190910190840161027b565b50858210156102b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610815806102d76000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806370a082311161007157806370a08231146101295780638ba4cc3c1461015257806395d89b4114610167578063a9059cbb1461016f578063ce714b5114610182578063dd62ed3e1461019557600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101ce565b6040516100c3919061065f565b60405180910390f35b6100df6100da3660046106c9565b610260565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046106f3565b610277565b60055460405160ff90911681526020016100c3565b6100f361013736600461072f565b6001600160a01b031660009081526020819052604090205490565b6101656101603660046106c9565b610326565b005b6100b661036e565b6100df61017d3660046106c9565b61037d565b6100df6101903660046106f3565b61038a565b6100f36101a3366004610751565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101dd90610784565b80601f016020809104026020016040519081016040528092919081815260200182805461020990610784565b80156102565780601f1061022b57610100808354040283529160200191610256565b820191906000526020600020905b81548152906001019060200180831161023957829003601f168201915b5050505050905090565b600061026d3384846103a1565b5060015b92915050565b6000610284848484610490565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561030e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61031b85338584036103a1565b506001949350505050565b806002600082825461033891906107be565b90915550506001600160a01b038216600090815260208190526040812080548392906103659084906107be565b90915550505050565b6060600480546101dd90610784565b600061026d338484610490565b60006103978484846103a1565b5060019392505050565b6001600160a01b0383166104035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610305565b6001600160a01b0382166104645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610305565b6001600160a01b0392831660009081526001602090815260408083209490951682529290925291902055565b6001600160a01b0383166104f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610305565b6001600160a01b0382166105565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610305565b6001600160a01b038316600090815260208190526040902054818110156105ce5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610305565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106059084906107be565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161065191815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561068c57858101830151858201604001528201610670565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106c457600080fd5b919050565b600080604083850312156106dc57600080fd5b6106e5836106ad565b946020939093013593505050565b60008060006060848603121561070857600080fd5b610711846106ad565b925061071f602085016106ad565b9150604084013590509250925092565b60006020828403121561074157600080fd5b61074a826106ad565b9392505050565b6000806040838503121561076457600080fd5b61076d836106ad565b915061077b602084016106ad565b90509250929050565b600181811c9082168061079857607f821691505b6020821081036107b857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561027157634e487b7160e01b600052601160045260246000fdfea2646970667358221220a1dec430e536a5a10a28fc4b864936f9d148be4c0a5db1246a0865556ca3bdde64736f6c63430008120033"
    54  MULTIBALANCE_BIN="608060405234801561001057600080fd5b50610483806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d3e5ca8714610030575b600080fd5b61004361003e3660046102a5565b610059565b604051610050919061032b565b60405180910390f35b60606000610068836001610385565b67ffffffffffffffff8111156100805761008061039e565b6040519080825280602002602001820160405280156100a9578160200160208202803683370190505b509050846001600160a01b031631816000815181106100ca576100ca6103b4565b60200260200101818152505060005b838110156102805760008585838181106100f5576100f56103b4565b905060200201602081019061010a91906103ca565b905060006060826001600160a01b03167f70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be8a60405160240161015b91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161019991906103ec565b600060405180830381855afa9150503d80600081146101d4576040519150601f19603f3d011682016040523d82523d6000602084013e6101d9565b606091505b509092509050816102285760405162461bcd60e51b815260206004820152601560248201527418985b185b98d953d98818d85b1b0819985a5b1959605a1b604482015260640160405180910390fd5b60008180602001905181019061023e919061041b565b9050808661024d876001610385565b8151811061025d5761025d6103b4565b60200260200101818152505050505050808061027890610434565b9150506100d9565b50949350505050565b80356001600160a01b03811681146102a057600080fd5b919050565b6000806000604084860312156102ba57600080fd5b6102c384610289565b9250602084013567ffffffffffffffff808211156102e057600080fd5b818601915086601f8301126102f457600080fd5b81358181111561030357600080fd5b8760208260051b850101111561031857600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561036357835183529284019291840191600101610347565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156103985761039861036f565b92915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156103dc57600080fd5b6103e582610289565b9392505050565b6000825160005b8181101561040d57602081860181015185830152016103f3565b506000920191825250919050565b60006020828403121561042d57600080fd5b5051919050565b6000600182016104465761044661036f565b506001019056fea26469706673582212207074e3e189a2692e2841f7943a9de24bcdbca943ee6bfcbd83a2fa6e43ec497b64736f6c63430008120033"
    55  
    56  MODULES='["eth","txpool"]' # "eth,net,web3,debug,admin,personal,txpool,clique"
    57  
    58  # Write genesis json. ".*Block" fields represent block height where certain
    59  # protocols take effect. The addresses in the "alloc" field are allocated
    60  # "balance". Values are in wei. 1*10^18 wei is equal to one MANTIC. Addresses
    61  # are allocated 50,000 MANTIC. The first address belongs to alpha node
    62  # Write genesis json file.
    63  echo "Writing genesis json file".
    64  cat > "${NODES_ROOT}/genesis.json" <<EOF
    65  {
    66    "config": {
    67      "chainId": 90001,
    68      "homesteadBlock": 0,
    69      "eip150Block": 0,
    70      "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    71      "eip155Block": 0,
    72      "eip158Block": 0,
    73      "byzantiumBlock": 0,
    74      "constantinopleBlock": 0,
    75      "petersburgBlock": 0,
    76      "istanbulBlock": 0,
    77      "muirGlacierBlock": 0,
    78      "berlinBlock": 0,
    79      "londonBlock": 0,
    80      "bor": {
    81        "burntContract": {
    82          "0": "0x000000000000000000000000000000000000dead"
    83        }
    84      }
    85    },
    86    "gasLimit": "0x989680",
    87    "difficulty": "0x1",
    88    "alloc": {
    89      "18d65fb8d60c1199bb1ad381be47aa692b482605": {
    90        "balance": "50000000000000000000000"
    91      }
    92    }
    93  }
    94  EOF
    95  
    96  
    97  makenode () {
    98  NAME=$1
    99  HTTP_PORT=$2
   100  WS_PORT=$3
   101  AUTHRPC_PORT=$4
   102  NODE_PORT=$5
   103  SESSION_ID=$6
   104  ADDRESS_JSON_FILE_NAME=$7
   105  ADDRESS_JSON=$8
   106  GRPC_PORT=$9
   107  NODE_KEY=${10}
   108  
   109  echo "Creating simnet ${NAME} node"
   110  
   111  NODE_DIR="${NODES_ROOT}/${NAME}"
   112  BOR_DIR="${NODE_DIR}/bor"
   113  mkdir -p "${BOR_DIR}/bor" # There is a bor/bor dir we need to write the nodekey to.
   114  
   115  cat > "${HARNESS_DIR}/${NAME}" <<EOF
   116  #!/usr/bin/env bash
   117  bor attach "${BOR_DIR}/bor.ipc" \$*
   118  EOF
   119  chmod +x "${HARNESS_DIR}/${NAME}"
   120  
   121  # Write mine script if CHAIN_ADDRESS is present.
   122  if [ "${CHAIN_ADDRESS}" != "_" ]; then
   123    # The mining script may end up mining more or less blocks than specified.
   124    cat > "${HARNESS_DIR}/mine-${NAME}" <<EOF
   125  #!/usr/bin/env bash
   126  NUM=1
   127  case \$1 in
   128      ''|*[!0-9]*)  ;;
   129      *) NUM=\$1 ;;
   130  esac
   131  echo "Mining \${NUM} blocks..."
   132  START_BLOCK=\$("${HARNESS_DIR}/${NAME}" --exec 'eth.blockNumber')
   133  # echo "Start Block: \${START_BLOCK}"
   134  CURRENT_BLOCK=\${START_BLOCK}
   135  "${HARNESS_DIR}/${NAME}" --exec 'miner.start()' > /dev/null
   136  DIFF=0
   137  while [ "\${DIFF}" -lt "\${NUM}" ];do
   138    sleep 0.05
   139    CURRENT_BLOCK=\$("${HARNESS_DIR}/${NAME}" --exec 'eth.blockNumber')
   140    DIFF=\$((CURRENT_BLOCK-START_BLOCK))
   141    # echo "Current Block: \${CURRENT_BLOCK}"
   142  done
   143  "${HARNESS_DIR}/${NAME}" --exec 'miner.stop()' > /dev/null
   144  echo "Blocks Mined: \${DIFF}"
   145  EOF
   146    chmod +x "${HARNESS_DIR}/mine-${NAME}"
   147  fi
   148  
   149  cat > "${NODE_DIR}/bor.toml" <<EOF
   150  chain = "${GENESIS_JSON_FILE_LOCATION}"
   151  identity = "${NAME}"
   152  verbosity = 5
   153  vmdebug = true
   154  datadir = "${BOR_DIR}"
   155  ancient = "${BOR_DIR}/geth-ancient"
   156  keystore = "${BOR_DIR}/keystore"
   157  ethstats = ""
   158  devfakeauthor = true
   159  
   160  [p2p]
   161    maxpeers = 50
   162    maxpendpeers = 50
   163    bind = "127.0.0.1"
   164    port = ${NODE_PORT}
   165    nodiscover = true
   166    nat = "none"
   167    netrestrict = "127.0.0.1/8,::1/128"
   168    txarrivalwait = "500ms"
   169  
   170  [heimdall]
   171    "bor.without" = true
   172    "bor.runheimdall" = false
   173    "bor.useheimdallapp" = false
   174  
   175  [miner]
   176    mine = false
   177    etherbase = "0x${CHAIN_ADDRESS}"
   178    extradata = ""
   179    gaslimit = 30000000
   180    gasprice = "1000000000"
   181    recommit = "2m5s"
   182  
   183  [jsonrpc]
   184    ipcdisable = false
   185    ipcpath = "${BOR_DIR}/bor.ipc"
   186    gascap = 50000000
   187    evmtimeout = "5s"
   188    txfeecap = 5.0
   189    allow-unprotected-txs = false
   190    [jsonrpc.http]
   191      enabled = true
   192      port = ${HTTP_PORT}
   193      host = "localhost"
   194      api = ${MODULES}
   195      vhosts = ["localhost"]
   196      corsdomain = ["localhost"]
   197    [jsonrpc.ws]
   198      enabled = true
   199      port = ${WS_PORT}
   200      host = "localhost"
   201      api = ${MODULES}
   202      origins = ["localhost"]
   203    [jsonrpc.auth]
   204      jwtsecret = ""
   205      addr = "localhost"
   206      port = ${AUTHRPC_PORT}
   207      vhosts = ["localhost"]
   208  
   209  [accounts]
   210    unlock = ["${CHAIN_ADDRESS}"]
   211    password = "${NODE_DIR}/password"
   212    allow-insecure-unlock = true
   213    lightkdf = false
   214    disable-bor-wallet = false
   215  
   216  [grpc]
   217    addr = ":${GRPC_PORT}"
   218  
   219  EOF
   220  
   221  # The node key lets us control the enode address value.
   222  echo "Setting node key"
   223  cat > "${BOR_DIR}/bor/nodekey" <<EOF
   224  $NODE_KEY
   225  EOF
   226  
   227  # Write password file to unlock accounts later.
   228  cat > "${NODE_DIR}/password" <<EOF
   229  $PASSWORD
   230  EOF
   231  
   232  tmux new-window -t "${SESSION_ID}" -n "${NAME}" "${SHELL}"
   233  tmux send-keys -t "${SESSION_ID}" "set +o history" C-m
   234  tmux send-keys -t "${SESSION_ID}" "cd ${NODE_DIR}" C-m
   235  
   236  # Create two accounts. The first is used to mine blocks. The second contains
   237  # funds.
   238  mkdir -p "${BOR_DIR}/keystore"
   239  if [ "${CHAIN_ADDRESS}" != "_" ]; then
   240    echo "Creating account"
   241    cat > "${BOR_DIR}/keystore/${CHAIN_ADDRESS_JSON_FILE_NAME}" <<EOF
   242  $CHAIN_ADDRESS_JSON
   243  EOF
   244  fi
   245  
   246  cat > "${BOR_DIR}/keystore/${ADDRESS_JSON_FILE_NAME}" <<EOF
   247  ${ADDRESS_JSON}
   248  EOF
   249  
   250  # Providing a config file overwrites everything provided via cli so we have to
   251  # provided everything via the config file: See:
   252  # https://vscode.dev/github/maticnetwork/bor/blob/develop/internal/cli/server/command.go#L77
   253  tmux send-keys -t "${SESSION_ID}" "bor server --config ${NODE_DIR}/bor.toml 2>&1 | tee ${NODE_DIR}/${NAME}.log" C-m
   254  
   255  }
   256  # END makenode ()
   257  
   258  echo "Starting harness"
   259  tmux new-session -d -s "${SESSION}" "${SHELL}"
   260  
   261  echo "Creating nodes"
   262  makenode "alpha" "${ALPHA_HTTP_PORT}" "${ALPHA_WS_PORT}" \
   263           "${ALPHA_AUTHRPC_PORT}" "${ALPHA_NODE_PORT}" "${SESSION}:1" \
   264           "${ALPHA_ADDRESS_JSON_FILE_NAME}" "${ALPHA_ADDRESS_JSON}" "${ALPHA_GRPC_PORT}" \
   265           "${ALPHA_NODE_KEY}"
   266  makenode "beta" "${BETA_HTTP_PORT}" "${BETA_WS_PORT}" \
   267           "${BETA_AUTHRPC_PORT}" "${BETA_NODE_PORT}" "${SESSION}:2" \
   268           "${BETA_ADDRESS_JSON_FILE_NAME}" "${BETA_ADDRESS_JSON}" "${BETA_GRPC_PORT}" \
   269           "${BETA_NODE_KEY}"
   270  
   271  sleep 3
   272  
   273  echo "Connecting nodes"
   274  ${HARNESS_DIR}/alpha --exec "admin.addPeer('enode://${BETA_ENODE}@127.0.0.1:$BETA_NODE_PORT')"
   275  
   276  echo "Mining some blocks"
   277  "${HARNESS_DIR}/mine-beta" "2"
   278  "${HARNESS_DIR}/mine-alpha" "2"
   279  
   280  tmux rename-window -t $SESSION:0 'harness-ctl'
   281  tmux send-keys -t $SESSION:0 "set +o history" C-m
   282  tmux send-keys -t $SESSION:0 "cd ${HARNESS_DIR}" C-m
   283  
   284  cat > "${HARNESS_DIR}/send.js" <<EOF
   285  function sendLegacyTx(from, to, value) {
   286        from = from.startsWith('0x') ? from : '0x' + from
   287        to = to.startsWith('0x') ? to : '0x' + to
   288        return personal.sendTransaction({ from, to, value, gasPrice: 2000000000 }, "${PASSWORD}")
   289  }
   290  EOF
   291  
   292  cat > "${HARNESS_DIR}/sendtoaddress" <<EOF
   293  #!/usr/bin/env bash
   294  "${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/send.js --exec sendLegacyTx(\"${ALPHA_ADDRESS}\",\"\$1\",\$2*1e18)"
   295  EOF
   296  chmod +x "${HARNESS_DIR}/sendtoaddress"
   297  
   298  cat > "${HARNESS_DIR}/deploy.js" <<EOF
   299  function deploy(from, contract) {
   300    tx = personal.sendTransaction({from:"0x"+from,data:"0x"+contract,gasPrice:82000000000}, "${PASSWORD}")
   301    return tx;
   302  }
   303  
   304  function deployERC20(from, contract, decimals) {
   305    const hexDecimals = decimals.toString(16);
   306    const data = "0x" + contract + hexDecimals.padStart(64, "0");
   307    tx = personal.sendTransaction({from:"0x"+from,data:data,gasPrice:82000000000}, "${PASSWORD}")
   308    return tx;
   309  }
   310  
   311  function deployERC20Swap(from, contract, tokenAddr) {
   312    if (tokenAddr.slice(0, 2) === "0x") {
   313      tokenAddr = tokenAddr.slice(2)
   314    }
   315    var paddedAddr = tokenAddr.padStart(64, "0")
   316    tx = personal.sendTransaction({from:"0x"+from,data:"0x"+contract+paddedAddr,gasPrice:82000000000}, "${PASSWORD}")
   317    return tx;
   318  }
   319  EOF
   320  
   321  cat > "${HARNESS_DIR}/contractAddress.js" <<EOF
   322  function contractAddress(tx) {
   323    addr = eth.getTransactionReceipt(tx).contractAddress
   324    return addr;
   325  }
   326  EOF
   327  
   328  mine_pending_txs() {
   329    while true
   330    do
   331      TXSLEN=$("${HARNESS_DIR}/alpha" "--exec eth.pendingTransactions.length")
   332      if [ "$TXSLEN" -eq 0 ]; then
   333        break
   334      fi
   335      echo "Waiting for transactions to be mined."
   336      "${HARNESS_DIR}/mine-alpha" "5"
   337    done
   338  }
   339  
   340  echo "Mining a few more blocks"
   341  ${HARNESS_DIR}/mine-alpha 6
   342  
   343  SEND_AMT=5000000000000000000000 # 5000 MATIC
   344  TEST_TX_HASH=$(${HARNESS_DIR}/alpha --preload "${HARNESS_DIR}/send.js" --exec "sendLegacyTx(\"${ALPHA_ADDRESS}\",\"${BETA_ADDRESS}\",${SEND_AMT})" | sed 's/"//g')
   345  echo "ETH transaction to use in tests is ${TEST_TX_HASH}. Saving to ${NODES_ROOT}/test_tx_hash.txt"
   346  cat > "${NODES_ROOT}/test_tx_hash.txt" <<EOF
   347  ${TEST_TX_HASH}
   348  EOF
   349  
   350  TEST_BLOCK10_HASH=$(${HARNESS_DIR}/alpha --exec "eth.getHeaderByNumber(10).hash" | sed 's/"//g')
   351  echo "ETH block 10 hash to use in tests is ${TEST_BLOCK10_HASH}. Saving to ${NODES_ROOT}/test_block10_hash.txt"
   352  cat > "${NODES_ROOT}/test_block10_hash.txt" <<EOF
   353  ${TEST_BLOCK10_HASH}
   354  EOF
   355  
   356  echo "Deploying ETHSwapV0 contract."
   357  ETH_SWAP_CONTRACT_HASH=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/deploy.js --exec deploy(\"${ALPHA_ADDRESS}\",\"${ETH_SWAP_V0}\")" | sed 's/"//g')
   358  
   359  
   360  echo "Deploying USDC contract."
   361  TEST_USDC_CONTRACT_HASH=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/deploy.js --exec deployERC20(\"${ALPHA_ADDRESS}\",\"${TEST_TOKEN}\",6)" | sed 's/"//g')
   362  echo "TEST USDC contract hash is ${TEST_USDC_CONTRACT_HASH}."
   363  
   364  echo "Deploying USDT contract."
   365  TEST_USDT_CONTRACT_HASH=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/deploy.js --exec deployERC20(\"${ALPHA_ADDRESS}\",\"${TEST_TOKEN}\",6)" | sed 's/"//g')
   366  echo "TEST USDT contract hash is ${TEST_USDT_CONTRACT_HASH}."
   367  
   368  echo "Deploying MultiBalance contract."
   369  MULTIBALANCE_CONTRACT_HASH=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/deploy.js --exec deploy(\"${ALPHA_ADDRESS}\",\"${MULTIBALANCE_BIN}\")" | sed 's/"//g')
   370  
   371  mine_pending_txs
   372  
   373  ETH_SWAP_CONTRACT_ADDR=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/contractAddress.js --exec contractAddress(\"${ETH_SWAP_CONTRACT_HASH}\")" | sed 's/"//g')
   374  echo "ETH SWAP contract address is ${ETH_SWAP_CONTRACT_ADDR}. Saving to ${NODES_ROOT}/eth_swap_contract_address.txt"
   375  cat > "${NODES_ROOT}/eth_swap_contract_address.txt" <<EOF
   376  ${ETH_SWAP_CONTRACT_ADDR}
   377  EOF
   378  
   379  TEST_USDC_CONTRACT_ADDR=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/contractAddress.js --exec contractAddress(\"${TEST_USDC_CONTRACT_HASH}\")" | sed 's/"//g')
   380  echo "Test USDC contract address is ${TEST_USDC_CONTRACT_ADDR}. Saving to ${NODES_ROOT}/test_usdc_contract_address.txt"
   381  cat > "${NODES_ROOT}/test_usdc_contract_address.txt" <<EOF
   382  ${TEST_USDC_CONTRACT_ADDR}
   383  EOF
   384  
   385  TEST_USDT_CONTRACT_ADDR=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/contractAddress.js --exec contractAddress(\"${TEST_USDT_CONTRACT_HASH}\")" | sed 's/"//g')
   386  echo "Test USDT contract address is ${TEST_USDT_CONTRACT_ADDR}. Saving to ${NODES_ROOT}/test_usdt_contract_address.txt"
   387  cat > "${NODES_ROOT}/test_usdt_contract_address.txt" <<EOF
   388  ${TEST_USDT_CONTRACT_ADDR}
   389  EOF
   390  
   391  cat > "${NODES_ROOT}/harness-ctl/loadTestToken.js" <<EOF
   392      // This ABI comes from running 'solc --abi TestToken.sol'
   393      const testTokenABI = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"testApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
   394      testTokenABI.forEach((el) => {
   395          if (el.stateMutability === "view") {
   396              // the constant field was deprecated and the output from solc no
   397              // longer contains it, but the geth console version of web3 still
   398              // seems to require it.
   399              el.constant = true;
   400          }
   401      })
   402      var contract = web3.eth.contract(testTokenABI)
   403      web3.eth.defaultAccount = "0x${ALPHA_ADDRESS}"
   404      personal.unlockAccount(web3.eth.defaultAccount, '${PASSWORD}')
   405  
   406      function transfer (tokenAddr, decimals, addr, val) {
   407        addr = addr.startsWith('0x') ? addr : '0x'+addr
   408        var testToken = contract.at(tokenAddr)
   409        console.log(web3.eth.defaultAccount);
   410        return testToken.transfer(addr, val*Math.pow(10, decimals))
   411      }
   412  EOF
   413  
   414  cat > "${HARNESS_DIR}/alphaWithToken.sh" <<EOF
   415    # The testToken variable will provide access to the deployed test token contract.
   416    ./alpha --preload loadTestToken.js
   417  EOF
   418  chmod +x "${HARNESS_DIR}/alphaWithToken.sh"
   419  
   420  cat > "${HARNESS_DIR}/sendUSDC" <<EOF
   421  #!/usr/bin/env bash
   422  ./alpha --preload loadTestToken.js --exec "transfer(\"${TEST_USDC_CONTRACT_ADDR}\",6,\"\$1\",\$2)"
   423  EOF
   424  chmod +x "${HARNESS_DIR}/sendUSDC"
   425  
   426  echo "Deploying ERC20SwapV0 contract for USDC."
   427  USDC_SWAP_CONTRACT_HASH=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/deploy.js --exec deployERC20Swap(\"${ALPHA_ADDRESS}\",\"${ERC20_SWAP_V0}\",\"${TEST_USDC_CONTRACT_ADDR}\")" | sed 's/"//g')
   428  
   429  cat > "${HARNESS_DIR}/sendUSDT" <<EOF
   430  #!/usr/bin/env bash
   431  ./alpha --preload loadTestToken.js --exec "transfer(\"${TEST_USDT_CONTRACT_ADDR}\",6,\"\$1\",\$2)"
   432  EOF
   433  chmod +x "${HARNESS_DIR}/sendUSDT"
   434  
   435  echo "Deploying ERC20SwapV0 contract for USDT."
   436  USDT_SWAP_CONTRACT_HASH=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/deploy.js --exec deployERC20Swap(\"${ALPHA_ADDRESS}\",\"${ERC20_SWAP_V0}\",\"${TEST_USDT_CONTRACT_ADDR}\")" | sed 's/"//g')
   437  
   438  
   439  mine_pending_txs
   440  
   441  USDC_SWAP_CONTRACT_ADDR=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/contractAddress.js --exec contractAddress(\"${USDC_SWAP_CONTRACT_HASH}\")" | sed 's/"//g')
   442  echo "USDC SWAP contract address is ${USDC_SWAP_CONTRACT_ADDR}. Saving to ${NODES_ROOT}/usdc_swap_contract_address.txt"
   443  cat > "${NODES_ROOT}/usdc_swap_contract_address.txt" <<EOF
   444  ${USDC_SWAP_CONTRACT_ADDR}
   445  EOF
   446  
   447  USDT_SWAP_CONTRACT_ADDR=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/contractAddress.js --exec contractAddress(\"${USDT_SWAP_CONTRACT_HASH}\")" | sed 's/"//g')
   448  echo "USDT SWAP contract address is ${USDT_SWAP_CONTRACT_ADDR}. Saving to ${NODES_ROOT}/usdt_swap_contract_address.txt"
   449  cat > "${NODES_ROOT}/usdt_swap_contract_address.txt" <<EOF
   450  ${USDT_SWAP_CONTRACT_ADDR}
   451  EOF
   452  
   453  MULTIBALANCE_CONTRACT_ADDR=$("${HARNESS_DIR}/alpha" "--preload ${HARNESS_DIR}/contractAddress.js --exec contractAddress(\"${MULTIBALANCE_CONTRACT_HASH}\")" | sed 's/"//g')
   454  echo "MultiBalance contract address is ${MULTIBALANCE_CONTRACT_ADDR}. Saving to ${NODES_ROOT}/multibalance_address.txt"
   455  cat > "${NODES_ROOT}/multibalance_address.txt" <<EOF
   456  ${MULTIBALANCE_CONTRACT_ADDR}
   457  EOF
   458  
   459  # Miner
   460  tmux new-window -t $SESSION:3 -n "miner" $SHELL
   461  tmux send-keys -t $SESSION:3 "cd ${NODES_ROOT}/harness-ctl" C-m
   462  tmux send-keys -t $SESSION:3 "watch -n 15 ./mine-alpha 1" C-m
   463  
   464  tmux select-window -t $SESSION:0
   465  tmux send-keys -t $SESSION:0 "set -o history" C-m
   466  tmux attach-session -t $SESSION