{
"cells": [
{
"cell_type": "markdown",
"source": [
"## Gift Contract Testing"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 1,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/sergenedashkovsky/Library/Python/3.8/lib/python/site-packages/ipfshttpclient/client/__init__.py:75: VersionMismatch: Unsupported daemon version '0.10.0' (not in range: 0.5.0 โค โฆ < 0.9.0)\n",
" warnings.warn(exceptions.VersionMismatch(version, minimum, maximum))\n"
]
}
],
"source": [
"from web3.auto import w3\n",
"import pandas as pd\n",
"from cyberpy import generate_wallet, address_to_address\n",
"from cyberpy._message_signer import Message\n",
"from cyberpy._wallet import seed_to_privkey\n",
"from eth_account.messages import encode_defunct\n",
"import json\n",
"from time import time\n",
"import ipfshttpclient\n",
"from tqdm.notebook import tqdm\n",
"from base64 import b64encode\n",
"from multiprocess import Pool\n",
"from math import ceil\n",
"from dotenv import dotenv_values\n",
"from IPython.core.display import display, HTML\n",
"\n",
"from contract_utils import instantiate_contract, execute_contract_bash, query_contract, get_ipfs_cid_from_str, get_proofs, ContractUtils\n",
"\n",
"\n",
"ipfs_client = ipfshttpclient.connect()\n",
"\n",
"NUMBER_OF_PARTICIPANTS = 10\n",
"NUMBER_OF_ACTIVATED_PARTICIPANTS = 5\n",
"KEY_PHRASE = 'KEY PHRASE'\n",
"NICKNAME_LIST = [f'john{round(time())}{number}' for number in range(NUMBER_OF_PARTICIPANTS)]\n",
"AVATAR_CID_LIST = [get_ipfs_cid_from_str(_nickname + '_avatar') for _nickname in NICKNAME_LIST]\n",
"CLAIM_AMOUNT_LIST = [1_000_000] * NUMBER_OF_PARTICIPANTS\n",
"\n",
"INITIAL_BALANCE = str(1_000_000_000)\n",
"COEF_UP = str(13)\n",
"COEF_DOWN = str(7)\n",
"TARGET_CLAIM = str(2)\n",
"\n",
"WALLET_ADDRESS = dotenv_values('.env')['WALLET_ADDRESS']\n",
"WALLET_SEED = dotenv_values('.env')['WALLET_SEED']\n",
"DISPLAY_TX_EXECUTION = False\n",
"TEST_ACCOUNT_ADDRESS = 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'\n",
"TEST_ACCOUNT_SEED = 'end spread blind steak install glare pride pony switch exit zone faint ' \\\n",
" 'opinion march layer illness can nest fence top debate monitor supreme noble'\n",
"\n",
"INIT_SUBGRAPH_CONTRACTS = False\n",
"SUBGRAPH_CODE_ID = str(40)\n",
"NAME_SUBGRAPH_CONTRACT_ADDRESS = 'bostrom1rncw9n73gm30vhrv6e4p603hav0gue8y5y9fgqa84k4atf5pqvfqcrnpl6'\n",
"AVATAR_SUBGRAPH_CONTRACT_ADDRESS = 'bostrom164w2vl7z7lpuvex6z3ru0v55fgq3dmvxuqt0aejp49w7fyc8g6kshreggq'\n",
"PROOF_SUBGRAPH_CONTRACT_ADDRESS = 'bostrom1543j9n7slzff3curyac7ylf2ctg7rk9zjf9ehj08eqx57xj33zzqdy6ga4'\n",
"\n",
"INIT_PASSPORT_CONTRACT = False\n",
"PASSPORT_CODE_ID = str(43)\n",
"PASSPORT_CONTRACT_ADDRESS = 'bostrom1g59m935w4kxmtfx5hhykre7w9q497ptp66asspz76vhgarss5ensdy35s8'\n",
"\n",
"INIT_GIFT_CONTRACT = True\n",
"GIFT_CODE_ID = str(20)\n",
"GIFT_CONTRACT_ADDRESS = 'bostrom1rt2acjyhs4jfjdq56pftpu7762hy9gfl63je6fnhwrc5p5y4kmuqxg0262'\n",
"\n",
"ROOT_SOURCE_FILE_NAME = 'root_testing_source_' + str(NUMBER_OF_PARTICIPANTS) + '_addresses.json'\n",
"PROOF_FILE_NAME = 'proof_testing_' + str(NUMBER_OF_PARTICIPANTS) + '_addresses.json'\n",
"ROOT_FILE_NAME = 'root_testing_' + str(NUMBER_OF_PARTICIPANTS) + '_addresses'"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Generate addresses and sign messages"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 2,
"outputs": [
{
"data": {
"text/plain": " 0%| | 0/10 [00:00<?, ?it/s]",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "d3aa21cf881c4595b12fdcb8b17a394d"
}
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": " amount nickname avatar \\\n0 1000000 john16495703800 QmegFZS691C4pJFaFS3NVDNLd5PtjmMiJHJKtqzSsz2tBZ \n1 1000000 john16495703801 QmbAqD21zVJD6D2kvoGnV1Fb8T5XKUG81V8Y7iZVHnpisC \n2 1000000 john16495703802 QmdYTELFKWGpiZ6Qaf6bDHavRMrJ5nmqMTc94mwtnNzr6M \n3 1000000 john16495703803 QmTqzfWV7DsGQsyoMHJTVBRkDtKBEjy5hPErMRfpbmimPm \n4 1000000 john16495703804 QmNWiHGs9WjmzbcQz96fugBm2Bu6CR3uZVsMuiM1tr4wYD \n5 1000000 john16495703805 QmUva19NDC6iVZZ9gGL7jZfsXxpPd6bijzhbUsFvSXTcbV \n6 1000000 john16495703806 QmWXwdS2HtDFxfQ6bwdFvAjJ5HUGS7kQf3pmtkQDzYt9cd \n7 1000000 john16495703807 QmS8CCPyZkNZtiyyt6KbNVKYvbv2yQHaNPEF9ghhUWUN6X \n8 1000000 john16495703808 QmbNWqULQTj2CAR34Fr4bYYMTypcEwnHrcfVLsXUf2UsMD \n9 1000000 john16495703809 QmbtBRQCdJb43phHufuvfKc6oyA6aMH15Rygey8siYXhhu \n\n ethereum_address \\\n0 0x9124d6592264ae9e6693dfa39b8f82f16182419c \n1 0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa \n2 0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359 \n3 0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8 \n4 0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149 \n5 0xc45e14572ad2ec57da27faab28919bbda692037e \n6 0xb66bcd3431cc5b1999f98c608963fa9ff2a5d0d2 \n7 0xcb6babdbc3dd4f702237dfdd644ddbc676055e86 \n8 0x1b15c1f4711a8f32f299ccc6121bcac89770a13f \n9 0xcc9f8f54c6f538c6c3a8dc58aef9c591362ae0da \n\n ethereum_private_key \\\n0 0xcf156a52fd254b48a87c77926630089376a2e6d507f5... \n1 0x46a7e94a530954956533e1a923d07c212eafc00a8d23... \n2 0xcdf21ac40a23b30ac2208d9e3f72c7b798068df70f39... \n3 0x08669cd3a21d69b25991ac891c5d1529b64fc893f846... \n4 0xb241a6f909672108710c007c1ea3173656139243deaa... \n5 0xbac8ff0d46365a737ac95be339a9036f861bc371ce14... \n6 0x02c99ad10dc1e0b4400d72bdca2b9623975de1489887... \n7 0x67d44f92161e85defdf10fa79c090b4a579d24ad1a60... \n8 0xdfc6b8f64235c064afe1724ba46c0c8004ccb2d49bd2... \n9 0x49f4580779525a07739ab68efb3fa4f2f4edc21feee7... \n\n bostrom_address \\\n0 bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c \n1 bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q \n2 bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf \n3 bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp \n4 bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk \n5 bostrom13f4sr82dux0kfu7uma3atv7frhzx57ghvm9dxa \n6 bostrom1pypc2s9dh0f6yp0xcqwjap99l5k75qgmp2kntw \n7 bostrom13ugfw2hr7s8f0yttczg8e2v6v04dlwwarsc4rw \n8 bostrom19pfkg9t5nvsmmjffsjv6k625xy98esgukewtyy \n9 bostrom1kzrdznpsuhj8scw8p734eex07g0779vr8xw0d6 \n\n cosmos_address \\\n0 cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl \n1 cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8 \n2 cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw \n3 cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x \n4 cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93 \n5 cosmos13f4sr82dux0kfu7uma3atv7frhzx57gh0g37c6 \n6 cosmos1pypc2s9dh0f6yp0xcqwjap99l5k75qgmzezq4f \n7 cosmos13ugfw2hr7s8f0yttczg8e2v6v04dlwwaqrvxaf \n8 cosmos19pfkg9t5nvsmmjffsjv6k625xy98esgu426c6r \n9 cosmos1kzrdznpsuhj8scw8p734eex07g0779vry46una \n\n cosmos_seed \\\n0 mixed february demise clinic master race famou... \n1 quantum seed good glass spend spread usual sur... \n2 lava protect work pulse guess toss rocket volu... \n3 medal medal pull rule blur result gift agree g... \n4 hope someone gown grain execute reason chaos g... \n5 bicycle lyrics ring donate price inherit stool... \n6 leaf try race mango beef notice opera pyramid ... \n7 course avoid view wrist casino medal rail adap... \n8 lake thing harvest style luxury ensure notable... \n9 car grief adapt crisp enroll disagree keep awa... \n\n message \\\n0 bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c... \n1 bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q... \n2 bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf... \n3 bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp... \n4 bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk... \n5 bostrom13f4sr82dux0kfu7uma3atv7frhzx57ghvm9dxa... \n6 bostrom1pypc2s9dh0f6yp0xcqwjap99l5k75qgmp2kntw... \n7 bostrom13ugfw2hr7s8f0yttczg8e2v6v04dlwwarsc4rw... \n8 bostrom19pfkg9t5nvsmmjffsjv6k625xy98esgukewtyy... \n9 bostrom1kzrdznpsuhj8scw8p734eex07g0779vr8xw0d6... \n\n ethereum_message_signature \\\n0 0x9a2bbfc7ab3c7d4ed8910b0a495931c8a055c2fc29e7... \n1 0x5297763d57331039613520d1de1c9f94b0bf104d6fd2... \n2 0x3b7e242a976bd013862872532234536ea2e3397d3411... \n3 0x90d40af4947b8a499c22c79e1ea29cea981be1f819db... \n4 0xcc8656d43b15788c5e0400596f5cebd760da1fd0b75e... \n5 0xb950237f45061a45796e9f6045ef0675a32ee0df4616... \n6 0xd767925b964cff4fb53af0c37b4b8c6b6cfdd8ca4e9a... \n7 0xebd149ca2557ecf8a1a8c6db64d41b31c5e14ba706ba... \n8 0xfe52914b475dd609d4e0baa2c6a5ba3b40aa2e9821e8... \n9 0x7e9b67979c02be2aec144527a8368e91cc31e57cb68b... \n\n cosmos_message_signed_row \\\n0 {'pub_key': 'A89DQdUqRt7dzpi8/1Jxyb1hh+a6Q0bGo... \n1 {'pub_key': 'At5DOzq36uQeOGT//9kV3HcsPmy4HTAsO... \n2 {'pub_key': 'Aph+/Mv0rOA0Ft+8iP6s7UJqTdOXK8tsK... \n3 {'pub_key': 'A055jXQh2nQUJQQdlssNe0ZWQf9KRkUba... \n4 {'pub_key': 'Ao00rX4/WgQwgoR9wgwOTEgNq5mh9qfDI... \n5 {'pub_key': 'A2Udd3YSUpIPjMuAEmdwCzFYEvHQEHxu3... \n6 {'pub_key': 'AxeON8LGKhtXnzWl1yIuWli6bvIQCj9db... \n7 {'pub_key': 'A5BI/jGNrd6zeAhtrhpxewXKHuQwvcDY2... \n8 {'pub_key': 'A8NrNm4aqTxCiZ3HU2ZKHsOZyE9ID++ls... \n9 {'pub_key': 'AuJljuNtsGVzelxAYia98hz89J7bH5rN6... \n\n cosmos_message_signature \n0 eyJwdWJfa2V5IjoiQTg5RFFkVXFSdDdkenBpOC8xSnh5Yj... \n1 eyJwdWJfa2V5IjoiQXQ1RE96cTM2dVFlT0dULy85a1YzSG... \n2 eyJwdWJfa2V5IjoiQXBoKy9NdjByT0EwRnQrOGlQNnM3VU... \n3 eyJwdWJfa2V5IjoiQTA1NWpYUWgyblFVSlFRZGxzc05lMF... \n4 eyJwdWJfa2V5IjoiQW8wMHJYNC9XZ1F3Z29SOXdnd09URW... \n5 eyJwdWJfa2V5IjoiQTJVZGQzWVNVcElQak11QUVtZHdDek... \n6 eyJwdWJfa2V5IjoiQXhlT044TEdLaHRYbnpXbDF5SXVXbG... \n7 eyJwdWJfa2V5IjoiQTVCSS9qR05yZDZ6ZUFodHJocHhld1... \n8 eyJwdWJfa2V5IjoiQThOck5tNGFxVHhDaVozSFUyWktIc0... \n9 eyJwdWJfa2V5IjoiQXVKbGp1TnRzR1Z6ZWx4QVlpYTk4aH... ",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>amount</th>\n <th>nickname</th>\n <th>avatar</th>\n <th>ethereum_address</th>\n <th>ethereum_private_key</th>\n <th>bostrom_address</th>\n <th>cosmos_address</th>\n <th>cosmos_seed</th>\n <th>message</th>\n <th>ethereum_message_signature</th>\n <th>cosmos_message_signed_row</th>\n <th>cosmos_message_signature</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1000000</td>\n <td>john16495703800</td>\n <td>QmegFZS691C4pJFaFS3NVDNLd5PtjmMiJHJKtqzSsz2tBZ</td>\n <td>0x9124d6592264ae9e6693dfa39b8f82f16182419c</td>\n <td>0xcf156a52fd254b48a87c77926630089376a2e6d507f5...</td>\n <td>bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c</td>\n <td>cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl</td>\n <td>mixed february demise clinic master race famou...</td>\n <td>bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c...</td>\n <td>0x9a2bbfc7ab3c7d4ed8910b0a495931c8a055c2fc29e7...</td>\n <td>{'pub_key': 'A89DQdUqRt7dzpi8/1Jxyb1hh+a6Q0bGo...</td>\n <td>eyJwdWJfa2V5IjoiQTg5RFFkVXFSdDdkenBpOC8xSnh5Yj...</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1000000</td>\n <td>john16495703801</td>\n <td>QmbAqD21zVJD6D2kvoGnV1Fb8T5XKUG81V8Y7iZVHnpisC</td>\n <td>0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa</td>\n <td>0x46a7e94a530954956533e1a923d07c212eafc00a8d23...</td>\n <td>bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q</td>\n <td>cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8</td>\n <td>quantum seed good glass spend spread usual sur...</td>\n <td>bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q...</td>\n <td>0x5297763d57331039613520d1de1c9f94b0bf104d6fd2...</td>\n <td>{'pub_key': 'At5DOzq36uQeOGT//9kV3HcsPmy4HTAsO...</td>\n <td>eyJwdWJfa2V5IjoiQXQ1RE96cTM2dVFlT0dULy85a1YzSG...</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1000000</td>\n <td>john16495703802</td>\n <td>QmdYTELFKWGpiZ6Qaf6bDHavRMrJ5nmqMTc94mwtnNzr6M</td>\n <td>0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359</td>\n <td>0xcdf21ac40a23b30ac2208d9e3f72c7b798068df70f39...</td>\n <td>bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf</td>\n <td>cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw</td>\n <td>lava protect work pulse guess toss rocket volu...</td>\n <td>bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf...</td>\n <td>0x3b7e242a976bd013862872532234536ea2e3397d3411...</td>\n <td>{'pub_key': 'Aph+/Mv0rOA0Ft+8iP6s7UJqTdOXK8tsK...</td>\n <td>eyJwdWJfa2V5IjoiQXBoKy9NdjByT0EwRnQrOGlQNnM3VU...</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1000000</td>\n <td>john16495703803</td>\n <td>QmTqzfWV7DsGQsyoMHJTVBRkDtKBEjy5hPErMRfpbmimPm</td>\n <td>0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8</td>\n <td>0x08669cd3a21d69b25991ac891c5d1529b64fc893f846...</td>\n <td>bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp</td>\n <td>cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x</td>\n <td>medal medal pull rule blur result gift agree g...</td>\n <td>bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp...</td>\n <td>0x90d40af4947b8a499c22c79e1ea29cea981be1f819db...</td>\n <td>{'pub_key': 'A055jXQh2nQUJQQdlssNe0ZWQf9KRkUba...</td>\n <td>eyJwdWJfa2V5IjoiQTA1NWpYUWgyblFVSlFRZGxzc05lMF...</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1000000</td>\n <td>john16495703804</td>\n <td>QmNWiHGs9WjmzbcQz96fugBm2Bu6CR3uZVsMuiM1tr4wYD</td>\n <td>0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149</td>\n <td>0xb241a6f909672108710c007c1ea3173656139243deaa...</td>\n <td>bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk</td>\n <td>cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93</td>\n <td>hope someone gown grain execute reason chaos g...</td>\n <td>bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk...</td>\n <td>0xcc8656d43b15788c5e0400596f5cebd760da1fd0b75e...</td>\n <td>{'pub_key': 'Ao00rX4/WgQwgoR9wgwOTEgNq5mh9qfDI...</td>\n <td>eyJwdWJfa2V5IjoiQW8wMHJYNC9XZ1F3Z29SOXdnd09URW...</td>\n </tr>\n <tr>\n <th>5</th>\n <td>1000000</td>\n <td>john16495703805</td>\n <td>QmUva19NDC6iVZZ9gGL7jZfsXxpPd6bijzhbUsFvSXTcbV</td>\n <td>0xc45e14572ad2ec57da27faab28919bbda692037e</td>\n <td>0xbac8ff0d46365a737ac95be339a9036f861bc371ce14...</td>\n <td>bostrom13f4sr82dux0kfu7uma3atv7frhzx57ghvm9dxa</td>\n <td>cosmos13f4sr82dux0kfu7uma3atv7frhzx57gh0g37c6</td>\n <td>bicycle lyrics ring donate price inherit stool...</td>\n <td>bostrom13f4sr82dux0kfu7uma3atv7frhzx57ghvm9dxa...</td>\n <td>0xb950237f45061a45796e9f6045ef0675a32ee0df4616...</td>\n <td>{'pub_key': 'A2Udd3YSUpIPjMuAEmdwCzFYEvHQEHxu3...</td>\n <td>eyJwdWJfa2V5IjoiQTJVZGQzWVNVcElQak11QUVtZHdDek...</td>\n </tr>\n <tr>\n <th>6</th>\n <td>1000000</td>\n <td>john16495703806</td>\n <td>QmWXwdS2HtDFxfQ6bwdFvAjJ5HUGS7kQf3pmtkQDzYt9cd</td>\n <td>0xb66bcd3431cc5b1999f98c608963fa9ff2a5d0d2</td>\n <td>0x02c99ad10dc1e0b4400d72bdca2b9623975de1489887...</td>\n <td>bostrom1pypc2s9dh0f6yp0xcqwjap99l5k75qgmp2kntw</td>\n <td>cosmos1pypc2s9dh0f6yp0xcqwjap99l5k75qgmzezq4f</td>\n <td>leaf try race mango beef notice opera pyramid ...</td>\n <td>bostrom1pypc2s9dh0f6yp0xcqwjap99l5k75qgmp2kntw...</td>\n <td>0xd767925b964cff4fb53af0c37b4b8c6b6cfdd8ca4e9a...</td>\n <td>{'pub_key': 'AxeON8LGKhtXnzWl1yIuWli6bvIQCj9db...</td>\n <td>eyJwdWJfa2V5IjoiQXhlT044TEdLaHRYbnpXbDF5SXVXbG...</td>\n </tr>\n <tr>\n <th>7</th>\n <td>1000000</td>\n <td>john16495703807</td>\n <td>QmS8CCPyZkNZtiyyt6KbNVKYvbv2yQHaNPEF9ghhUWUN6X</td>\n <td>0xcb6babdbc3dd4f702237dfdd644ddbc676055e86</td>\n <td>0x67d44f92161e85defdf10fa79c090b4a579d24ad1a60...</td>\n <td>bostrom13ugfw2hr7s8f0yttczg8e2v6v04dlwwarsc4rw</td>\n <td>cosmos13ugfw2hr7s8f0yttczg8e2v6v04dlwwaqrvxaf</td>\n <td>course avoid view wrist casino medal rail adap...</td>\n <td>bostrom13ugfw2hr7s8f0yttczg8e2v6v04dlwwarsc4rw...</td>\n <td>0xebd149ca2557ecf8a1a8c6db64d41b31c5e14ba706ba...</td>\n <td>{'pub_key': 'A5BI/jGNrd6zeAhtrhpxewXKHuQwvcDY2...</td>\n <td>eyJwdWJfa2V5IjoiQTVCSS9qR05yZDZ6ZUFodHJocHhld1...</td>\n </tr>\n <tr>\n <th>8</th>\n <td>1000000</td>\n <td>john16495703808</td>\n <td>QmbNWqULQTj2CAR34Fr4bYYMTypcEwnHrcfVLsXUf2UsMD</td>\n <td>0x1b15c1f4711a8f32f299ccc6121bcac89770a13f</td>\n <td>0xdfc6b8f64235c064afe1724ba46c0c8004ccb2d49bd2...</td>\n <td>bostrom19pfkg9t5nvsmmjffsjv6k625xy98esgukewtyy</td>\n <td>cosmos19pfkg9t5nvsmmjffsjv6k625xy98esgu426c6r</td>\n <td>lake thing harvest style luxury ensure notable...</td>\n <td>bostrom19pfkg9t5nvsmmjffsjv6k625xy98esgukewtyy...</td>\n <td>0xfe52914b475dd609d4e0baa2c6a5ba3b40aa2e9821e8...</td>\n <td>{'pub_key': 'A8NrNm4aqTxCiZ3HU2ZKHsOZyE9ID++ls...</td>\n <td>eyJwdWJfa2V5IjoiQThOck5tNGFxVHhDaVozSFUyWktIc0...</td>\n </tr>\n <tr>\n <th>9</th>\n <td>1000000</td>\n <td>john16495703809</td>\n <td>QmbtBRQCdJb43phHufuvfKc6oyA6aMH15Rygey8siYXhhu</td>\n <td>0xcc9f8f54c6f538c6c3a8dc58aef9c591362ae0da</td>\n <td>0x49f4580779525a07739ab68efb3fa4f2f4edc21feee7...</td>\n <td>bostrom1kzrdznpsuhj8scw8p734eex07g0779vr8xw0d6</td>\n <td>cosmos1kzrdznpsuhj8scw8p734eex07g0779vry46una</td>\n <td>car grief adapt crisp enroll disagree keep awa...</td>\n <td>bostrom1kzrdznpsuhj8scw8p734eex07g0779vr8xw0d6...</td>\n <td>0x7e9b67979c02be2aec144527a8368e91cc31e57cb68b...</td>\n <td>{'pub_key': 'AuJljuNtsGVzelxAYia98hz89J7bH5rN6...</td>\n <td>eyJwdWJfa2V5IjoiQXVKbGp1TnRzR1Z6ZWx4QVlpYTk4aH...</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"claims_list = []\n",
"for i in tqdm(range(NUMBER_OF_PARTICIPANTS)):\n",
" claim_item = {'amount': CLAIM_AMOUNT_LIST[i],\n",
" 'nickname': NICKNAME_LIST[i],\n",
" 'avatar': AVATAR_CID_LIST[i]}\n",
"\n",
" # Generate Ethereum wallet\n",
" ethereum_wallet = w3.eth.account.create(KEY_PHRASE)\n",
" claim_item['ethereum_address'] = ethereum_wallet.address.lower()\n",
" claim_item['ethereum_private_key'] = ethereum_wallet.privateKey.hex()\n",
"\n",
" # Generate Bostrom and Cosmos wallet\n",
" bostrom_wallet = generate_wallet()\n",
" claim_item['bostrom_address'] = bostrom_wallet['address']\n",
" claim_item['cosmos_address'] = address_to_address(bostrom_wallet['address'], 'cosmos')\n",
" claim_item['cosmos_seed'] = bostrom_wallet['seed']\n",
"\n",
" # Create message\n",
" claim_item['message'] = f\"{claim_item['bostrom_address']}:QmRX8qYgeZoYM3M5zzQaWEpVFdpin6FvVXvp6RPQK3oufV\"\n",
"\n",
" # Sign message form Ethereum address\n",
" ethereum_signed_message = \\\n",
" w3.eth.account.sign_message(\n",
" signable_message=encode_defunct(text=claim_item['message']),\n",
" private_key=ethereum_wallet.privateKey)\n",
" # print(signed_message.signature)\n",
" claim_item['ethereum_message_signature'] = ethereum_signed_message.signature.hex()\n",
"\n",
" # Sign message form Cosmos address\n",
" cosmos_msg = Message(privkey=seed_to_privkey(seed=claim_item['cosmos_seed']))\n",
" cosmos_msg.add_message(signing_message=claim_item['message'], signer_prefix='cosmos')\n",
" claim_item['cosmos_message_signed_row'] = cosmos_msg.get_signed_message()\n",
" claim_item['cosmos_message_signature'] = b64encode(json.dumps(claim_item['cosmos_message_signed_row']).replace('\\n', '').replace(' ', '').encode('utf-8')).decode(\"utf-8\")\n",
"\n",
" # Verify message\n",
" assert claim_item['ethereum_address'] == w3.eth.account.recover_message(\n",
" signable_message=encode_defunct(text=claim_item['message']),\n",
" signature=claim_item['ethereum_message_signature']).lower()\n",
"\n",
" claims_list.append(claim_item)\n",
"\n",
"claims_df = pd.DataFrame(claims_list)\n",
"claims_df.to_csv('claims_ethereum_test_data_without_proof_' + str(NUMBER_OF_PARTICIPANTS) + '_addresses.csv')\n",
"claims_df"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Create Merkle Tree, Get Root and Proofs"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 3,
"outputs": [],
"source": [
"root_source_list = [{'address': _item['ethereum_address'],\n",
" 'amount': str(_item['amount'])} for _item in claims_list]+ \\\n",
" [{'address': _item['cosmos_address'],\n",
" 'amount': str(_item['amount'])} for _item in claims_list]\n",
"root_source_list.append({'address': '0xF2749114FeaAD68854E01C8eE762C7170532FdfD'.lower(), 'amount': '10000000'})\n",
"with open(ROOT_SOURCE_FILE_NAME, 'w') as outfile:\n",
" outfile.write(str(root_source_list).replace(\"'\", '\"'))"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 4,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{('root_testing_source_10_addresses.json', 'temp/proofs_0.json', 0, 21)}\n",
"yarn run v1.22.17\n",
"$ ts-node index.ts --input root_testing_source_10_addresses.json --output temp/proofs_0.json --start_index 0 --end_index 21\n",
"Merkle root: 3dc8421e3f4b94c8e3aed45c031e95a002007dfac135ca398314b163f15a2cee\n",
"Number of addresses in the Merkle tree: 21\n",
"Done in 3.58s.\n",
"\n"
]
}
],
"source": [
"NUMBER_OF_THREADS = 10\n",
"BASH_SIZE = 1000\n",
"\n",
"tasks = set(\n",
" (\n",
" (ROOT_SOURCE_FILE_NAME,\n",
" f'temp/proofs_{i}.json',\n",
" i * BASH_SIZE,\n",
" min(NUMBER_OF_PARTICIPANTS * 2 + 1, (i + 1) * BASH_SIZE + 1))\n",
" for i in range(ceil(2 * NUMBER_OF_PARTICIPANTS/BASH_SIZE))\n",
" )\n",
")\n",
"print(tasks)\n",
"with Pool(processes=NUMBER_OF_THREADS) as pool:\n",
" res = pool.starmap(get_proofs, tasks)\n",
"assert res == [True] * len(res)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 5,
"outputs": [
{
"data": {
"text/plain": " address amount \\\n0 0x9124d6592264ae9e6693dfa39b8f82f16182419c 1000000 \n1 0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa 1000000 \n2 0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359 1000000 \n3 0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8 1000000 \n4 0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149 1000000 \n5 0xc45e14572ad2ec57da27faab28919bbda692037e 1000000 \n6 0xb66bcd3431cc5b1999f98c608963fa9ff2a5d0d2 1000000 \n7 0xcb6babdbc3dd4f702237dfdd644ddbc676055e86 1000000 \n8 0x1b15c1f4711a8f32f299ccc6121bcac89770a13f 1000000 \n9 0xcc9f8f54c6f538c6c3a8dc58aef9c591362ae0da 1000000 \n10 cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl 1000000 \n11 cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8 1000000 \n12 cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw 1000000 \n13 cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x 1000000 \n14 cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93 1000000 \n15 cosmos13f4sr82dux0kfu7uma3atv7frhzx57gh0g37c6 1000000 \n16 cosmos1pypc2s9dh0f6yp0xcqwjap99l5k75qgmzezq4f 1000000 \n17 cosmos13ugfw2hr7s8f0yttczg8e2v6v04dlwwaqrvxaf 1000000 \n18 cosmos19pfkg9t5nvsmmjffsjv6k625xy98esgu426c6r 1000000 \n19 cosmos1kzrdznpsuhj8scw8p734eex07g0779vry46una 1000000 \n20 0xf2749114feaad68854e01c8ee762c7170532fdfd 10000000 \n\n proof \n0 [78900d7c06c43ae20970087421f80e49257815363f6a3... \n1 [d0c8f5fc66c5a977340dd92568b1b989992f3b3c5b114... \n2 [9d5777f2aee55468fcd9a426466d35917086cc43855ca... \n3 [5e42909234f9266f1a6cac6f517ca7971472cf36a9308... \n4 [d24b8d0cf08a253a44e55c4c134626b76f66b6b4e61e5... \n5 [e9774d5437498124573647289f2644bf38883f338f882... \n6 [3030215ce1bd034297d5a9c5261eb17c827fdfebf7e83... \n7 [b498a35a47dfd85c3f4e59859952eb3d24041f4deb0fc... \n8 [2c95a091c7f94fc231386ca44cab8f7db16da40dc54cd... \n9 [82773830b6b2d0bc76832c66fc9ac3e2fb9b6e6c84fe3... \n10 [30fdf3cb4f18b08a20a2db3acc5ac961095089672200b... \n11 [c571aa4a3bb95f180e8865ac710746125a1d2936940a1... \n12 [d560e34d04482e9002c51c4155cc578ad1083221e4d87... \n13 [97b75d463fd68f9b16cf586bdf6d0d6dd3044beb7a640... \n14 [1504edb79fb0500537d30e48ee1ad4fda5c61b7ac9922... \n15 [13f37008c6c89394e615b6364285ad49bee702aead436... \n16 [7e9525a33b54415b76ebf3ffafa075390d3f2978b0db5... \n17 [87e33d647e99fb3b55137be5085df925d6a2281d6cdc5... \n18 [f06c989e17e5be69f92632911aefe6c0cceeee318a46a... \n19 [2d45e290725a0cad1c162b89cb246f4ae12aaada24584... \n20 [733457c1598a18d306bfe0827f58d38573d2d35a4e98c... ",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>address</th>\n <th>amount</th>\n <th>proof</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0x9124d6592264ae9e6693dfa39b8f82f16182419c</td>\n <td>1000000</td>\n <td>[78900d7c06c43ae20970087421f80e49257815363f6a3...</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa</td>\n <td>1000000</td>\n <td>[d0c8f5fc66c5a977340dd92568b1b989992f3b3c5b114...</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359</td>\n <td>1000000</td>\n <td>[9d5777f2aee55468fcd9a426466d35917086cc43855ca...</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8</td>\n <td>1000000</td>\n <td>[5e42909234f9266f1a6cac6f517ca7971472cf36a9308...</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149</td>\n <td>1000000</td>\n <td>[d24b8d0cf08a253a44e55c4c134626b76f66b6b4e61e5...</td>\n </tr>\n <tr>\n <th>5</th>\n <td>0xc45e14572ad2ec57da27faab28919bbda692037e</td>\n <td>1000000</td>\n <td>[e9774d5437498124573647289f2644bf38883f338f882...</td>\n </tr>\n <tr>\n <th>6</th>\n <td>0xb66bcd3431cc5b1999f98c608963fa9ff2a5d0d2</td>\n <td>1000000</td>\n <td>[3030215ce1bd034297d5a9c5261eb17c827fdfebf7e83...</td>\n </tr>\n <tr>\n <th>7</th>\n <td>0xcb6babdbc3dd4f702237dfdd644ddbc676055e86</td>\n <td>1000000</td>\n <td>[b498a35a47dfd85c3f4e59859952eb3d24041f4deb0fc...</td>\n </tr>\n <tr>\n <th>8</th>\n <td>0x1b15c1f4711a8f32f299ccc6121bcac89770a13f</td>\n <td>1000000</td>\n <td>[2c95a091c7f94fc231386ca44cab8f7db16da40dc54cd...</td>\n </tr>\n <tr>\n <th>9</th>\n <td>0xcc9f8f54c6f538c6c3a8dc58aef9c591362ae0da</td>\n <td>1000000</td>\n <td>[82773830b6b2d0bc76832c66fc9ac3e2fb9b6e6c84fe3...</td>\n </tr>\n <tr>\n <th>10</th>\n <td>cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl</td>\n <td>1000000</td>\n <td>[30fdf3cb4f18b08a20a2db3acc5ac961095089672200b...</td>\n </tr>\n <tr>\n <th>11</th>\n <td>cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8</td>\n <td>1000000</td>\n <td>[c571aa4a3bb95f180e8865ac710746125a1d2936940a1...</td>\n </tr>\n <tr>\n <th>12</th>\n <td>cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw</td>\n <td>1000000</td>\n <td>[d560e34d04482e9002c51c4155cc578ad1083221e4d87...</td>\n </tr>\n <tr>\n <th>13</th>\n <td>cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x</td>\n <td>1000000</td>\n <td>[97b75d463fd68f9b16cf586bdf6d0d6dd3044beb7a640...</td>\n </tr>\n <tr>\n <th>14</th>\n <td>cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93</td>\n <td>1000000</td>\n <td>[1504edb79fb0500537d30e48ee1ad4fda5c61b7ac9922...</td>\n </tr>\n <tr>\n <th>15</th>\n <td>cosmos13f4sr82dux0kfu7uma3atv7frhzx57gh0g37c6</td>\n <td>1000000</td>\n <td>[13f37008c6c89394e615b6364285ad49bee702aead436...</td>\n </tr>\n <tr>\n <th>16</th>\n <td>cosmos1pypc2s9dh0f6yp0xcqwjap99l5k75qgmzezq4f</td>\n <td>1000000</td>\n <td>[7e9525a33b54415b76ebf3ffafa075390d3f2978b0db5...</td>\n </tr>\n <tr>\n <th>17</th>\n <td>cosmos13ugfw2hr7s8f0yttczg8e2v6v04dlwwaqrvxaf</td>\n <td>1000000</td>\n <td>[87e33d647e99fb3b55137be5085df925d6a2281d6cdc5...</td>\n </tr>\n <tr>\n <th>18</th>\n <td>cosmos19pfkg9t5nvsmmjffsjv6k625xy98esgu426c6r</td>\n <td>1000000</td>\n <td>[f06c989e17e5be69f92632911aefe6c0cceeee318a46a...</td>\n </tr>\n <tr>\n <th>19</th>\n <td>cosmos1kzrdznpsuhj8scw8p734eex07g0779vry46una</td>\n <td>1000000</td>\n <td>[2d45e290725a0cad1c162b89cb246f4ae12aaada24584...</td>\n </tr>\n <tr>\n <th>20</th>\n <td>0xf2749114feaad68854e01c8ee762c7170532fdfd</td>\n <td>10000000</td>\n <td>[733457c1598a18d306bfe0827f58d38573d2d35a4e98c...</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"roots = []\n",
"proofs_df = pd.DataFrame(columns=['address', 'amount', 'proof'])\n",
"for task in tasks:\n",
" with open(task[1], 'r') as proof_file:\n",
" root_and_proof_json = json.load(proof_file)\n",
" roots.append(root_and_proof_json['merkle_root'])\n",
" proofs_df = proofs_df.append(pd.DataFrame(root_and_proof_json['proofs']), ignore_index=True)\n",
"assert roots == [roots[0]] * len(roots)\n",
"root = roots[0]\n",
"proofs_df"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 6,
"outputs": [
{
"data": {
"text/plain": " amount nickname avatar \\\n0 1000000 john16495703800 QmegFZS691C4pJFaFS3NVDNLd5PtjmMiJHJKtqzSsz2tBZ \n1 1000000 john16495703801 QmbAqD21zVJD6D2kvoGnV1Fb8T5XKUG81V8Y7iZVHnpisC \n2 1000000 john16495703802 QmdYTELFKWGpiZ6Qaf6bDHavRMrJ5nmqMTc94mwtnNzr6M \n3 1000000 john16495703803 QmTqzfWV7DsGQsyoMHJTVBRkDtKBEjy5hPErMRfpbmimPm \n4 1000000 john16495703804 QmNWiHGs9WjmzbcQz96fugBm2Bu6CR3uZVsMuiM1tr4wYD \n\n ethereum_address \\\n0 0x9124d6592264ae9e6693dfa39b8f82f16182419c \n1 0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa \n2 0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359 \n3 0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8 \n4 0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149 \n\n ethereum_private_key \\\n0 0xcf156a52fd254b48a87c77926630089376a2e6d507f5... \n1 0x46a7e94a530954956533e1a923d07c212eafc00a8d23... \n2 0xcdf21ac40a23b30ac2208d9e3f72c7b798068df70f39... \n3 0x08669cd3a21d69b25991ac891c5d1529b64fc893f846... \n4 0xb241a6f909672108710c007c1ea3173656139243deaa... \n\n bostrom_address \\\n0 bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c \n1 bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q \n2 bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf \n3 bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp \n4 bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk \n\n cosmos_address \\\n0 cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl \n1 cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8 \n2 cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw \n3 cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x \n4 cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93 \n\n cosmos_seed \\\n0 mixed february demise clinic master race famou... \n1 quantum seed good glass spend spread usual sur... \n2 lava protect work pulse guess toss rocket volu... \n3 medal medal pull rule blur result gift agree g... \n4 hope someone gown grain execute reason chaos g... \n\n message \\\n0 bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c... \n1 bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q... \n2 bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf... \n3 bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp... \n4 bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk... \n\n ethereum_message_signature \\\n0 0x9a2bbfc7ab3c7d4ed8910b0a495931c8a055c2fc29e7... \n1 0x5297763d57331039613520d1de1c9f94b0bf104d6fd2... \n2 0x3b7e242a976bd013862872532234536ea2e3397d3411... \n3 0x90d40af4947b8a499c22c79e1ea29cea981be1f819db... \n4 0xcc8656d43b15788c5e0400596f5cebd760da1fd0b75e... \n\n cosmos_message_signed_row \\\n0 {'pub_key': 'A89DQdUqRt7dzpi8/1Jxyb1hh+a6Q0bGo... \n1 {'pub_key': 'At5DOzq36uQeOGT//9kV3HcsPmy4HTAsO... \n2 {'pub_key': 'Aph+/Mv0rOA0Ft+8iP6s7UJqTdOXK8tsK... \n3 {'pub_key': 'A055jXQh2nQUJQQdlssNe0ZWQf9KRkUba... \n4 {'pub_key': 'Ao00rX4/WgQwgoR9wgwOTEgNq5mh9qfDI... \n\n cosmos_message_signature \\\n0 eyJwdWJfa2V5IjoiQTg5RFFkVXFSdDdkenBpOC8xSnh5Yj... \n1 eyJwdWJfa2V5IjoiQXQ1RE96cTM2dVFlT0dULy85a1YzSG... \n2 eyJwdWJfa2V5IjoiQXBoKy9NdjByT0EwRnQrOGlQNnM3VU... \n3 eyJwdWJfa2V5IjoiQTA1NWpYUWgyblFVSlFRZGxzc05lMF... \n4 eyJwdWJfa2V5IjoiQW8wMHJYNC9XZ1F3Z29SOXdnd09URW... \n\n ethereum_proof \\\n0 [78900d7c06c43ae20970087421f80e49257815363f6a3... \n1 [d0c8f5fc66c5a977340dd92568b1b989992f3b3c5b114... \n2 [9d5777f2aee55468fcd9a426466d35917086cc43855ca... \n3 [5e42909234f9266f1a6cac6f517ca7971472cf36a9308... \n4 [d24b8d0cf08a253a44e55c4c134626b76f66b6b4e61e5... \n\n cosmos_proof \n0 [30fdf3cb4f18b08a20a2db3acc5ac961095089672200b... \n1 [c571aa4a3bb95f180e8865ac710746125a1d2936940a1... \n2 [d560e34d04482e9002c51c4155cc578ad1083221e4d87... \n3 [97b75d463fd68f9b16cf586bdf6d0d6dd3044beb7a640... \n4 [1504edb79fb0500537d30e48ee1ad4fda5c61b7ac9922... ",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>amount</th>\n <th>nickname</th>\n <th>avatar</th>\n <th>ethereum_address</th>\n <th>ethereum_private_key</th>\n <th>bostrom_address</th>\n <th>cosmos_address</th>\n <th>cosmos_seed</th>\n <th>message</th>\n <th>ethereum_message_signature</th>\n <th>cosmos_message_signed_row</th>\n <th>cosmos_message_signature</th>\n <th>ethereum_proof</th>\n <th>cosmos_proof</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1000000</td>\n <td>john16495703800</td>\n <td>QmegFZS691C4pJFaFS3NVDNLd5PtjmMiJHJKtqzSsz2tBZ</td>\n <td>0x9124d6592264ae9e6693dfa39b8f82f16182419c</td>\n <td>0xcf156a52fd254b48a87c77926630089376a2e6d507f5...</td>\n <td>bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c</td>\n <td>cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl</td>\n <td>mixed february demise clinic master race famou...</td>\n <td>bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c...</td>\n <td>0x9a2bbfc7ab3c7d4ed8910b0a495931c8a055c2fc29e7...</td>\n <td>{'pub_key': 'A89DQdUqRt7dzpi8/1Jxyb1hh+a6Q0bGo...</td>\n <td>eyJwdWJfa2V5IjoiQTg5RFFkVXFSdDdkenBpOC8xSnh5Yj...</td>\n <td>[78900d7c06c43ae20970087421f80e49257815363f6a3...</td>\n <td>[30fdf3cb4f18b08a20a2db3acc5ac961095089672200b...</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1000000</td>\n <td>john16495703801</td>\n <td>QmbAqD21zVJD6D2kvoGnV1Fb8T5XKUG81V8Y7iZVHnpisC</td>\n <td>0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa</td>\n <td>0x46a7e94a530954956533e1a923d07c212eafc00a8d23...</td>\n <td>bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q</td>\n <td>cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8</td>\n <td>quantum seed good glass spend spread usual sur...</td>\n <td>bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q...</td>\n <td>0x5297763d57331039613520d1de1c9f94b0bf104d6fd2...</td>\n <td>{'pub_key': 'At5DOzq36uQeOGT//9kV3HcsPmy4HTAsO...</td>\n <td>eyJwdWJfa2V5IjoiQXQ1RE96cTM2dVFlT0dULy85a1YzSG...</td>\n <td>[d0c8f5fc66c5a977340dd92568b1b989992f3b3c5b114...</td>\n <td>[c571aa4a3bb95f180e8865ac710746125a1d2936940a1...</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1000000</td>\n <td>john16495703802</td>\n <td>QmdYTELFKWGpiZ6Qaf6bDHavRMrJ5nmqMTc94mwtnNzr6M</td>\n <td>0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359</td>\n <td>0xcdf21ac40a23b30ac2208d9e3f72c7b798068df70f39...</td>\n <td>bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf</td>\n <td>cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw</td>\n <td>lava protect work pulse guess toss rocket volu...</td>\n <td>bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf...</td>\n <td>0x3b7e242a976bd013862872532234536ea2e3397d3411...</td>\n <td>{'pub_key': 'Aph+/Mv0rOA0Ft+8iP6s7UJqTdOXK8tsK...</td>\n <td>eyJwdWJfa2V5IjoiQXBoKy9NdjByT0EwRnQrOGlQNnM3VU...</td>\n <td>[9d5777f2aee55468fcd9a426466d35917086cc43855ca...</td>\n <td>[d560e34d04482e9002c51c4155cc578ad1083221e4d87...</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1000000</td>\n <td>john16495703803</td>\n <td>QmTqzfWV7DsGQsyoMHJTVBRkDtKBEjy5hPErMRfpbmimPm</td>\n <td>0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8</td>\n <td>0x08669cd3a21d69b25991ac891c5d1529b64fc893f846...</td>\n <td>bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp</td>\n <td>cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x</td>\n <td>medal medal pull rule blur result gift agree g...</td>\n <td>bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp...</td>\n <td>0x90d40af4947b8a499c22c79e1ea29cea981be1f819db...</td>\n <td>{'pub_key': 'A055jXQh2nQUJQQdlssNe0ZWQf9KRkUba...</td>\n <td>eyJwdWJfa2V5IjoiQTA1NWpYUWgyblFVSlFRZGxzc05lMF...</td>\n <td>[5e42909234f9266f1a6cac6f517ca7971472cf36a9308...</td>\n <td>[97b75d463fd68f9b16cf586bdf6d0d6dd3044beb7a640...</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1000000</td>\n <td>john16495703804</td>\n <td>QmNWiHGs9WjmzbcQz96fugBm2Bu6CR3uZVsMuiM1tr4wYD</td>\n <td>0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149</td>\n <td>0xb241a6f909672108710c007c1ea3173656139243deaa...</td>\n <td>bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk</td>\n <td>cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93</td>\n <td>hope someone gown grain execute reason chaos g...</td>\n <td>bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk...</td>\n <td>0xcc8656d43b15788c5e0400596f5cebd760da1fd0b75e...</td>\n <td>{'pub_key': 'Ao00rX4/WgQwgoR9wgwOTEgNq5mh9qfDI...</td>\n <td>eyJwdWJfa2V5IjoiQW8wMHJYNC9XZ1F3Z29SOXdnd09URW...</td>\n <td>[d24b8d0cf08a253a44e55c4c134626b76f66b6b4e61e5...</td>\n <td>[1504edb79fb0500537d30e48ee1ad4fda5c61b7ac9922...</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cosmos_proofs_df = proofs_df[proofs_df.address.str.startswith('cosmos')]'address', 'proof'\n",
"ethereum_proofs_df = proofs_df[proofs_df.address.str.startswith('0x')]'address', 'proof'\n",
"\n",
"claims_with_proofs_df = claims_df\\\n",
" .merge(\n",
" ethereum_proofs_df.rename(columns={'address': 'ethereum_address', 'proof': 'ethereum_proof'}),\n",
" how='left',\n",
" on='ethereum_address')\\\n",
" .merge(\n",
" cosmos_proofs_df.rename(columns={'address': 'cosmos_address', 'proof': 'cosmos_proof'}),\n",
" how='left',\n",
" on='cosmos_address')\n",
"\n",
"claims_with_proofs_df.to_csv('claims_ethereum_test_data_' + str(NUMBER_OF_PARTICIPANTS) + '_addresses.csv')\n",
"claims_with_proofs_df.head()"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Instantiate Contracts\n",
"### Instantiate SUBGRAPH Contracts"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 7,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Name subgraph contract address: bostrom1rncw9n73gm30vhrv6e4p603hav0gue8y5y9fgqa84k4atf5pqvfqcrnpl6\n",
"Avatar subgraph contract address: bostrom164w2vl7z7lpuvex6z3ru0v55fgq3dmvxuqt0aejp49w7fyc8g6kshreggq\n",
"Proof subgraph contract address: bostrom1543j9n7slzff3curyac7ylf2ctg7rk9zjf9ehj08eqx57xj33zzqdy6ga4\n"
]
}
],
"source": [
"if INIT_SUBGRAPH_CONTRACTS:\n",
" name_subgraph_contract_address = \\\n",
" instantiate_contract(\n",
" init_query=f'''{{\"owner\":\"{WALLET_ADDRESS}\", \"executer\":\"{WALLET_ADDRESS}\"}}''',\n",
" contract_code_id=SUBGRAPH_CODE_ID,\n",
" contract_label='test name subgraph')\n",
" avatar_subgraph_contract_address = \\\n",
" instantiate_contract(\n",
" init_query=f'''{{\"owner\":\"{WALLET_ADDRESS}\", \"executer\":\"{WALLET_ADDRESS}\"}}''',\n",
" contract_code_id=SUBGRAPH_CODE_ID,\n",
" contract_label='test avatar subgraph')\n",
" proof_subgraph_contract_address = \\\n",
" instantiate_contract(\n",
" init_query=f'''{{\"owner\":\"{WALLET_ADDRESS}\", \"executer\":\"{WALLET_ADDRESS}\"}}''',\n",
" contract_code_id=SUBGRAPH_CODE_ID,\n",
" contract_label='test proof subgraph')\n",
"else:\n",
" name_subgraph_contract_address = NAME_SUBGRAPH_CONTRACT_ADDRESS\n",
" avatar_subgraph_contract_address = AVATAR_SUBGRAPH_CONTRACT_ADDRESS\n",
" proof_subgraph_contract_address = PROOF_SUBGRAPH_CONTRACT_ADDRESS\n",
"print(f'Name subgraph contract address: {name_subgraph_contract_address}\\n'\n",
" f'Avatar subgraph contract address: {avatar_subgraph_contract_address}\\n'\n",
" f'Proof subgraph contract address: {proof_subgraph_contract_address}')"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Instantiate Passport Contract"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 8,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Passport contract address: bostrom1g59m935w4kxmtfx5hhykre7w9q497ptp66asspz76vhgarss5ensdy35s8\n"
]
}
],
"source": [
"if INIT_PASSPORT_CONTRACT:\n",
" passport_contract_address = \\\n",
" instantiate_contract(\n",
" init_query=f'''{{\"name\":\"CPT\", \"minter\":\"{WALLET_ADDRESS}\", \"owner\":\"{WALLET_ADDRESS}\", \"symbol\":\"CPT\", \"avatar_subgraph\": \"{avatar_subgraph_contract_address}\", \"name_subgraph\": \"{name_subgraph_contract_address}\", \"proof_subgraph\": \"{proof_subgraph_contract_address}\"}}''',\n",
" contract_code_id=PASSPORT_CODE_ID,\n",
" contract_label='test passport')\n",
"else:\n",
" passport_contract_address = PASSPORT_CONTRACT_ADDRESS\n",
"print(f'Passport contract address: {passport_contract_address}')"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Set executor in the Subgraph Contracts"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 9,
"outputs": [],
"source": [
"def set_executor_subgraph(subgraph_contract_address: str, new_executor_address: str, display_data: bool = False):\n",
" return execute_contract_bash(execute_query=f'''{{\"update_executer\":{{\"new_executer\":\"{new_executor_address}\"}}}}''',\n",
" contract_address=subgraph_contract_address,\n",
" gas=600000,\n",
" display_data=display_data)\n",
"\n",
"if INIT_PASSPORT_CONTRACT or INIT_SUBGRAPH_CONTRACTS:\n",
" set_executor_subgraph(subgraph_contract_address=name_subgraph_contract_address, new_executor_address=passport_contract_address)\n",
" set_executor_subgraph(subgraph_contract_address=avatar_subgraph_contract_address, new_executor_address=passport_contract_address)\n",
" set_executor_subgraph(subgraph_contract_address=proof_subgraph_contract_address, new_executor_address=passport_contract_address)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Instantiate Gift Contract"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 10,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gift contract address: bostrom1nn0hd8l3fqhxhsgdeqp3rew79w2nrtm5qedrvamd7a54r2c0czjqj5hcsn\n"
]
}
],
"source": [
"if INIT_GIFT_CONTRACT:\n",
" gift_contract_address = \\\n",
" instantiate_contract(\n",
" init_query=f'''{{\"owner\":\"{WALLET_ADDRESS}\", \"passport\":\"{passport_contract_address}\", \"allowed_native\":\"boot\", \"initial_balance\":\"{INITIAL_BALANCE}\", \"coefficient_up\":\"{COEF_UP}\", \"coefficient_down\":\"{COEF_DOWN}\", \"coefficient\":\"{COEF_UP}\", \"target_claim\":\"{TARGET_CLAIM}\"}}''',\n",
" contract_code_id=GIFT_CODE_ID,\n",
" amount=INITIAL_BALANCE,\n",
" contract_label='test gift')\n",
"else:\n",
" gift_contract_address = GIFT_CONTRACT_ADDRESS\n",
"print(f'Gift contract address: {gift_contract_address}')"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Initiate Class of Output Parsing"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 11,
"outputs": [],
"source": [
"contract_utils = ContractUtils(ipfs_client=ipfs_client,\n",
" address_dict= {\n",
" gift_contract_address: 'Gift Contract',\n",
" passport_contract_address: 'Passport Contract',\n",
" WALLET_ADDRESS: 'Passport Owner Address',\n",
" name_subgraph_contract_address: 'Name Subgraph Contract',\n",
" avatar_subgraph_contract_address: 'Avatar Subgraph Contract',\n",
" proof_subgraph_contract_address: 'Proof Subgraph Contract'})"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Register Merkle Root"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 12,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Events\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from Passport Owner Address wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: register_merkle_root\n",
"\tmerkle_root: 3dc8421e3f4b94c8e3aed45c031e95a002007dfac135ca398314b163f15a2cee\n",
"Gas used: 121,232\n",
"Tx hash: 85B31F8C7895D79C33B890F77B7F87B5F3218E217B4C489D2189575E2C3E34D4\n"
]
}
],
"source": [
"root_register_output = execute_contract_bash(execute_query=f'''{{\"register_merkle_root\":{{\"merkle_root\":\"{root}\"}}}}''',\n",
" from_address=WALLET_ADDRESS,\n",
" contract_address=gift_contract_address)\n",
"contract_utils.parse_contract_execution_json(root_register_output)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"#### Get Merkle Root form the Gift Contract"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
},
"execution_count": 156
},
{
"cell_type": "code",
"execution_count": 13,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gift contract bostrom1nn0hd8l3fqhxhsgdeqp3rew79w2nrtm5qedrvamd7a54r2c0czjqj5hcsn\n",
"{'data': {'merkle_root': '3dc8421e3f4b94c8e3aed45c031e95a002007dfac135ca398314b163f15a2cee'}}\n"
]
}
],
"source": [
"print(f'Gift contract {gift_contract_address}')\n",
"print(query_contract(query='''{\"merkle_root\": {}}''',\n",
" contract_address=gift_contract_address))"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Send coins to new addresses"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 14,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 1boot\n",
"\treceiver: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tamount: 1boot\n",
"\treceiver: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tamount: 1boot\n",
"\treceiver: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tamount: 1boot\n",
"\treceiver: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tamount: 1boot\n",
"\treceiver: bostrom13f4sr82dux0kfu7uma3atv7frhzx57ghvm9dxa\n",
"\tamount: 1boot\n",
"\treceiver: bostrom1pypc2s9dh0f6yp0xcqwjap99l5k75qgmp2kntw\n",
"\tamount: 1boot\n",
"\treceiver: bostrom13ugfw2hr7s8f0yttczg8e2v6v04dlwwarsc4rw\n",
"\tamount: 1boot\n",
"\treceiver: bostrom19pfkg9t5nvsmmjffsjv6k625xy98esgukewtyy\n",
"\tamount: 1boot\n",
"\treceiver: bostrom1kzrdznpsuhj8scw8p734eex07g0779vr8xw0d6\n",
"\tamount: 1boot\n",
"\n",
"coin spent\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\tspender: Passport Owner Address\n",
"\tamount: 1boot\n",
"\n",
"{'attributes': [{'key': 'action', 'value': '/cosmos.bank.v1beta1.MsgMultiSend'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'sender', 'value': 'bostrom1mxdtr8lruutugqtxgpw2sf2tl2mhzlq5fd2du0'}, {'key': 'module', 'value': 'bank'}], 'type': 'message'}\n",
"\n",
"transfer\n",
"\trecipient: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 1boot\n",
"\trecipient: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tamount: 1boot\n",
"\trecipient: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tamount: 1boot\n",
"\trecipient: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tamount: 1boot\n",
"\trecipient: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tamount: 1boot\n",
"\trecipient: bostrom13f4sr82dux0kfu7uma3atv7frhzx57ghvm9dxa\n",
"\tamount: 1boot\n",
"\trecipient: bostrom1pypc2s9dh0f6yp0xcqwjap99l5k75qgmp2kntw\n",
"\tamount: 1boot\n",
"\trecipient: bostrom13ugfw2hr7s8f0yttczg8e2v6v04dlwwarsc4rw\n",
"\tamount: 1boot\n",
"\trecipient: bostrom19pfkg9t5nvsmmjffsjv6k625xy98esgukewtyy\n",
"\tamount: 1boot\n",
"\trecipient: bostrom1kzrdznpsuhj8scw8p734eex07g0779vr8xw0d6\n",
"\tamount: 1boot\n",
"Gas used: 291,894\n",
"Tx hash: 55CDAD5B0692ACDD9A5DD1281C0CAD93B0ABEF41D52D521CEB1CC35F87EB1CC0\n"
]
}
],
"source": [
"bostrom_addresses = claims_with_proofs_df.bostrom_address.to_list()\n",
"NUMBER_ADDRESSES_IN_SENDING_CHUNK = 1000\n",
"bostrom_addresses_chunks = [bostrom_addresses[i: i+ NUMBER_ADDRESSES_IN_SENDING_CHUNK] for i in range(0, len(bostrom_addresses), NUMBER_ADDRESSES_IN_SENDING_CHUNK)]\n",
"\n",
"for bostrom_addresses_item in bostrom_addresses_chunks:\n",
" send_output = contract_utils.send_coins(\n",
" from_seed=WALLET_SEED,\n",
" to_addresses=claims_with_proofs_df.bostrom_address.to_list(),\n",
" amounts=[1] * len(claims_with_proofs_df.bostrom_address.to_list()),\n",
" gas=min(71000 * len(claims_with_proofs_df.bostrom_address.to_list()), int(23e6)),\n",
" display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(contract_execution_json=send_output)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Create Passports"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 15,
"outputs": [
{
"data": {
"text/plain": "0it [00:00, ?it/s]",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "104e629a228f405caec0d8f478d061f3"
}
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Events\n",
"\n",
"cyberlinks\n",
"\tPassport Owner Address -> Nickname\n",
"\tNickname -> Passport Owner Address\n",
"\tneuron: Name Subgraph Contract\n",
"\n",
"\tNickname -> Avatar\n",
"\tAvatar -> Nickname\n",
"\tneuron: Avatar Subgraph Contract\n",
"\n",
"\n",
"execute\n",
"\texecute contract: Passport Contract\n",
"\texecute contract: Name Subgraph Contract\n",
"\texecute contract: Avatar Subgraph Contract\n",
"\n",
"message from bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"wasm\n",
"\t_contract_address: Passport Contract\n",
"\taction: mint\n",
"\tminter: Passport Contract\n",
"\ttoken_id: 1413\n",
"Gas used: 440,183\n",
"Tx hash: CDA96114D1ED58B64B4A2F38BEF6E35C4181F9CD8236B14F039BCF39D2F30C50\n"
]
}
],
"source": [
"for index, row in tqdm(claims_with_proofs_df[:NUMBER_OF_ACTIVATED_PARTICIPANTS].iterrows()):\n",
" if index == 0:\n",
" create_passport_json = contract_utils.create_passport(row, display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(create_passport_json, row=row)\n",
" else:\n",
" contract_utils.create_passport(row)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Proof (Add) Address to Passports"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 16,
"outputs": [
{
"data": {
"text/plain": "0it [00:00, ?it/s]",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "fb6c020e0e4b4ff3a480f87cb525513f"
}
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Events\n",
"\n",
"cyberlinks\n",
"\tNickname -> Ethereum Address\n",
"\tEthereum Address -> Nickname\n",
"\tneuron: Proof Subgraph Contract\n",
"\n",
"\n",
"execute\n",
"\texecute contract: Passport Contract\n",
"\texecute contract: Proof Subgraph Contract\n",
"\n",
"message from bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"wasm\n",
"\t_contract_address: Passport Contract\n",
"\taction: proof_address\n",
"\tnickname: john16495703801\n",
"\taddress: 0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa\n",
"Gas used: 281,090\n",
"Tx hash: 96C7ADA679DC321B73BF5E090CFA8E086FB906E87B1133E3CD03234F4A568115\n",
"\n",
"Events\n",
"\n",
"cyberlinks\n",
"\tNickname -> Cosmos Address\n",
"\tCosmos Address -> Nickname\n",
"\tneuron: Proof Subgraph Contract\n",
"\n",
"\n",
"execute\n",
"\texecute contract: Passport Contract\n",
"\texecute contract: Proof Subgraph Contract\n",
"\n",
"message from bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"wasm\n",
"\t_contract_address: Passport Contract\n",
"\taction: proof_address\n",
"\tnickname: john16495703801\n",
"\taddress: cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8\n",
"Gas used: 284,525\n",
"Tx hash: 7FC12C2CD87496689399FD468AAA5E536AB9A04A712CCC016EB1F5C18C7B05BD\n"
]
}
],
"source": [
"for index, row in tqdm(claims_with_proofs_df[:NUMBER_OF_ACTIVATED_PARTICIPANTS].iterrows()):\n",
" if index == 1:\n",
" proof_ethereum_address_json = contract_utils.proof_address(row, display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(proof_ethereum_address_json, row=row)\n",
"\n",
" proof_cosmos_address_json = contract_utils.proof_address(row, network='cosmos', display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(proof_cosmos_address_json, row=row)\n",
" else:\n",
" contract_utils.proof_address(row)\n",
" contract_utils.proof_address(row, network='cosmos')"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Claim"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 17,
"outputs": [
{
"data": {
"text/plain": "0it [00:00, ?it/s]",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "c00adad4b7754a548dd287666781a483"
}
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'claim': {'nickname': 'john16495703800', 'gift_claiming_address': '0x9124d6592264ae9e6693dfa39b8f82f16182419c', 'gift_amount': '1000000', 'proof': ['78900d7c06c43ae20970087421f80e49257815363f6a3a3563f5ec29d28940d1', '8cfc554eaa1feae2ff77f1307b0341fbdf7edf6be643fbe6083fd025f5cc6328', '788ddba1a2fb402628dd12efa2aafbab89e1dfbd57d5c2b279626936a990ba2b', '8fdbf3af68c6049a91547cdc34c7c7d862bc2445ba8e0688a4d334fa48e8fdf6', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: 0x9124d6592264ae9e6693dfa39b8f82f16182419c\n",
"\ttarget: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 13,000,000\n",
"Gas used: 315,015\n",
"Tx hash: E5005F4F9F5489C312145A360E16DB493DE55AD9E50984540318611B09DF9C24\n",
"{'claim': {'nickname': 'john16495703800', 'gift_claiming_address': 'cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl', 'gift_amount': '1000000', 'proof': ['30fdf3cb4f18b08a20a2db3acc5ac961095089672200b30ca6d313065c5664c5', '68ee8354cf5d2c8231dda926d3f5a80df35e2f9417d067347c4671bc044715da', '788ddba1a2fb402628dd12efa2aafbab89e1dfbd57d5c2b279626936a990ba2b', '8fdbf3af68c6049a91547cdc34c7c7d862bc2445ba8e0688a4d334fa48e8fdf6', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl\n",
"\ttarget: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 13,000,000\n",
"Gas used: 315,552\n",
"Tx hash: 0FC49AF516BFC03324E5A02B639AF8F42C91B67D562EEA501BA4975F56968176\n",
"{'claim': {'nickname': 'john16495703801', 'gift_claiming_address': '0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa', 'gift_amount': '1000000', 'proof': ['d0c8f5fc66c5a977340dd92568b1b989992f3b3c5b114c46455a5b2491bd9d6b', 'c2c29fd45a2eeebaf8c548789bc2c7412444469f8c24164d3d096bae98b198c1', '3793c33e8114594b79a2ac806df7a921d9b111babc33ce26433b3b29c6b8b7a0', '88942d0d4485753dca9f7593b98470a3e310fa20a4ad78b3548e310edc2f9294', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: 0x042a2bb0e4acd457bcadda6e05827aa83ebe91fa\n",
"\ttarget: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tamount: 12,922,000\n",
"Gas used: 315,296\n",
"Tx hash: A839FC20A445A038B054DAE1604DC9C1F41626B2A23767772259282A818D1752\n",
"{'claim': {'nickname': 'john16495703801', 'gift_claiming_address': 'cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8', 'gift_amount': '1000000', 'proof': ['c571aa4a3bb95f180e8865ac710746125a1d2936940a1ffafecf98aadb2d41df', 'c2c29fd45a2eeebaf8c548789bc2c7412444469f8c24164d3d096bae98b198c1', '3793c33e8114594b79a2ac806df7a921d9b111babc33ce26433b3b29c6b8b7a0', '88942d0d4485753dca9f7593b98470a3e310fa20a4ad78b3548e310edc2f9294', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: cosmos162f8clv5ht6j2kmms0556j0mezuj3e6k679fy8\n",
"\ttarget: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\tamount: 12,844,000\n",
"Gas used: 315,761\n",
"Tx hash: 3E5B0D8D5F488749C6105A71318FC955DC2ACF818F0B10D8C563B9ADBE942F3F\n",
"{'claim': {'nickname': 'john16495703802', 'gift_claiming_address': '0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359', 'gift_amount': '1000000', 'proof': ['9d5777f2aee55468fcd9a426466d35917086cc43855ca8274b54ab69a3926763', '0f4f00eb184448c07e51dacabbacf44b650bcff804336cd35b53aea2f28b8210', '3793c33e8114594b79a2ac806df7a921d9b111babc33ce26433b3b29c6b8b7a0', '88942d0d4485753dca9f7593b98470a3e310fa20a4ad78b3548e310edc2f9294', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: 0x0329bbdbf79eaf87d8d77ecb71f7f8d816544359\n",
"\ttarget: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tamount: 12,766,468\n",
"Gas used: 315,500\n",
"Tx hash: 56B810E9EC7BE15F13838BC24E61A30D3F09AA9DD68808B099EA1EEFC880877A\n",
"{'claim': {'nickname': 'john16495703802', 'gift_claiming_address': 'cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw', 'gift_amount': '1000000', 'proof': ['d560e34d04482e9002c51c4155cc578ad1083221e4d87016061a18fcb63f7406', '66f78f689f1978d3b6988865b455868e67c42f65330e2c75616b791c6d987b76', 'f4ddc1e9906cd06afa3d49b7f201b88b2a91abbcdb5ef77fd96f9064791bca4c', '487e9addb6ac54920bf3b68cab20c089b773e22db2e2b74f65795590cd5421fe']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: cosmos1he3vaq8knkx56tevl6mkel42eddq507mt0trdw\n",
"\ttarget: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\tamount: 12,689,404\n",
"Gas used: 314,581\n",
"Tx hash: 57C3DDED0189DFF25682AF6B901383F1E767366773295685FC3AE9199F845C5E\n",
"{'claim': {'nickname': 'john16495703803', 'gift_claiming_address': '0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8', 'gift_amount': '1000000', 'proof': ['5e42909234f9266f1a6cac6f517ca7971472cf36a9308f85e532d7dbb06139bd', '68ee8354cf5d2c8231dda926d3f5a80df35e2f9417d067347c4671bc044715da', '788ddba1a2fb402628dd12efa2aafbab89e1dfbd57d5c2b279626936a990ba2b', '8fdbf3af68c6049a91547cdc34c7c7d862bc2445ba8e0688a4d334fa48e8fdf6', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: 0x2c105e1ce5bc66a3ec0eb18089b00a471e3bd0a8\n",
"\ttarget: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tamount: 12,612,805\n",
"Gas used: 315,704\n",
"Tx hash: F0E35A791B483BB675EE1A23F01D839E6C29DEB1FB0C63A5ACE4CB0A32225D73\n",
"{'claim': {'nickname': 'john16495703803', 'gift_claiming_address': 'cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x', 'gift_amount': '1000000', 'proof': ['97b75d463fd68f9b16cf586bdf6d0d6dd3044beb7a640a0b42030f5684554e1e', '8d0ba595bfdde180641f64244d954a8e6f7679f414880a820f9621fd440d7637', '3f5a7595a6098370287df811d2d2af459135cd0a8b7e71c4b5c02cb1cdd6eb28', '88942d0d4485753dca9f7593b98470a3e310fa20a4ad78b3548e310edc2f9294', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: cosmos1efylm4laztlkc0ydye3k6g6cx95h6khwa37d9x\n",
"\ttarget: bostrom1efylm4laztlkc0ydye3k6g6cx95h6khw7z27mp\n",
"\tamount: 12,536,668\n",
"Gas used: 315,976\n",
"Tx hash: 7F952323C46F76D62B74468F2675620CA24C369878673EF3E418F4FF3A0173AD\n",
"{'claim': {'nickname': 'john16495703804', 'gift_claiming_address': '0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149', 'gift_amount': '1000000', 'proof': ['d24b8d0cf08a253a44e55c4c134626b76f66b6b4e61e547479585f4f155817b0', '66f78f689f1978d3b6988865b455868e67c42f65330e2c75616b791c6d987b76', 'f4ddc1e9906cd06afa3d49b7f201b88b2a91abbcdb5ef77fd96f9064791bca4c', '487e9addb6ac54920bf3b68cab20c089b773e22db2e2b74f65795590cd5421fe']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: 0xcd012b8e0c4a5bd5c9283a0a4281ec553420d149\n",
"\ttarget: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tamount: 12,460,991\n",
"Gas used: 314,255\n",
"Tx hash: DD8D790592140D135DDC6811116B74D7FAB2E3BAEEA3E1992BDC12B59761B9B3\n",
"{'claim': {'nickname': 'john16495703804', 'gift_claiming_address': 'cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93', 'gift_amount': '1000000', 'proof': ['1504edb79fb0500537d30e48ee1ad4fda5c61b7ac9922d18f6bcac92d6b51ef6', 'ede12e4ad76960f7b154499c6a8bdad1546c29b6c0c944454948d6d3a3474e00', '4a9eef354ac65a0aea9fe072e011797544eaeb847f9aec2895be9a2709dd9e9f', '8fdbf3af68c6049a91547cdc34c7c7d862bc2445ba8e0688a4d334fa48e8fdf6', 'eee157a02965da2c68325270a3893ccad9644d1a717328f173758f04d9d31620']}}\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tamount: 100000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tsender: Gift Contract\n",
"\tamount: 100000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: claim\n",
"\toriginal: cosmos1z4gex65lzw62uqapaxctfku4588ulvgnkhca93\n",
"\ttarget: bostrom1z4gex65lzw62uqapaxctfku4588ulvgn4yvwmk\n",
"\tamount: 12,385,771\n",
"Gas used: 316,001\n",
"Tx hash: E0C2F2951E77A4CA44F3F16EBA34EC5D41103EB1A9895BC3186C9EC3EC86274A\n"
]
}
],
"source": [
"for index, row in tqdm(claims_with_proofs_df[:NUMBER_OF_ACTIVATED_PARTICIPANTS].iterrows()):\n",
" if index == 0:\n",
" claim_ethereum_json = contract_utils.claim(row, display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(claim_ethereum_json)\n",
"\n",
" claim_cosmos_json = contract_utils.claim(row, network='cosmos', display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(claim_cosmos_json)\n",
" else:\n",
" claim_ethereum_json_2 = contract_utils.claim(row)\n",
" contract_utils.parse_contract_execution_json(claim_ethereum_json_2)\n",
"\n",
" claim_cosmos_json_2 = contract_utils.claim(row, network='cosmos')\n",
" contract_utils.parse_contract_execution_json(claim_cosmos_json_2)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Release Gift"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
},
"execution_count": 11
},
{
"cell_type": "code",
"execution_count": 18,
"outputs": [
{
"data": {
"text/plain": "0it [00:00, ?it/s]",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "880e97937b774e1b9a8bfc16bed1176d"
}
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 1290000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 1290000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tsender: Gift Contract\n",
"\tamount: 1290000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: release\n",
"\taddress: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tgift_address: 0x9124d6592264ae9e6693dfa39b8f82f16182419c\n",
"\tstage: 9\n",
"\tamount: 1,290,000\n",
"Gas used: 157,502\n",
"Tx hash: 07B209093AB4960C86A93450B0023387BA9337A3716C92F83BA92D998130DA9B\n",
"\n",
"Events\n",
"\n",
"coin received\n",
"\treceiver: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tamount: 1290000boot\n",
"\n",
"coin spent\n",
"\tspender: Gift Contract\n",
"\tamount: 1290000boot\n",
"\n",
"execute\n",
"\texecute contract: Gift Contract\n",
"\n",
"message from bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"transfer\n",
"\trecipient: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tsender: Gift Contract\n",
"\tamount: 1290000boot\n",
"\n",
"wasm\n",
"\t_contract_address: Gift Contract\n",
"\taction: release\n",
"\taddress: bostrom1y90fdf63dz6jfahupu4wdqp6v3f69rxptnr04c\n",
"\tgift_address: cosmos1y90fdf63dz6jfahupu4wdqp6v3f69rxpgqhutl\n",
"\tstage: 9\n",
"\tamount: 1,290,000\n",
"Gas used: 157,681\n",
"Tx hash: 5E702803DE153457E7CA64E1EBEEB5FAC7F05B3469641E6736E515D58CD4B89B\n"
]
}
],
"source": [
"for index, row in tqdm(claims_with_proofs_df[:NUMBER_OF_ACTIVATED_PARTICIPANTS].iterrows()):\n",
" if index == 0:\n",
" release_ethereum_json = contract_utils.release(row, display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(release_ethereum_json)\n",
"\n",
" release_cosmos_json = contract_utils.release(row, network='cosmos', display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(release_cosmos_json)\n",
" else:\n",
" contract_utils.release(row)\n",
" contract_utils.release(row, network='cosmos')"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Passport NFT testing\n",
"### Transfer Passport"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 19,
"outputs": [],
"source": [
"def get_passport_id(bostrom_address: str) -> str:\n",
" return query_contract(query=f'''{{\"tokens\": {{\"owner\": \"{bostrom_address}\"}}}}''',\n",
" contract_address=passport_contract_address)['data']['tokens'][0]"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 20,
"outputs": [
{
"data": {
"text/plain": "0it [00:00, ?it/s]",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "179496bd31d340eba7e93395240234ec"
}
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Events\n",
"\n",
"cyberlinks\n",
"\tQmPcFZbajorUYkkdeowYUD1zJRAWA13N4Koy4rLeZ4cDji -> Nickname\n",
"\tNickname -> QmPcFZbajorUYkkdeowYUD1zJRAWA13N4Koy4rLeZ4cDji\n",
"\tneuron: Name Subgraph Contract\n",
"\n",
"\n",
"execute\n",
"\texecute contract: Passport Contract\n",
"\texecute contract: Name Subgraph Contract\n",
"\texecute contract: Avatar Subgraph Contract\n",
"\n",
"message from bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"reply\n",
"\treply contract: Avatar Subgraph Contract\n",
"\n",
"wasm\n",
"\t_contract_address: Passport Contract\n",
"\taction: transfer_nft\n",
"\tsender: bostrom162f8clv5ht6j2kmms0556j0mezuj3e6ked366q\n",
"\trecipient: Passport Owner Address\n",
"\ttoken_id: 1414\n",
"Gas used: 385,801\n",
"Tx hash: 5F0B12D48BAB7041AACE2E9EA131AC85065B9D8AEE33D44568A4798D84785BC1\n"
]
}
],
"source": [
"for index, row in tqdm(claims_with_proofs_df[:NUMBER_OF_ACTIVATED_PARTICIPANTS].iterrows()):\n",
" if index == 1:\n",
" transfer_passport_json = contract_utils.transfer_passport(\n",
" row,\n",
" token_id=get_passport_id(row['bostrom_address']),\n",
" to_address=WALLET_ADDRESS,\n",
" display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(\n",
" transfer_passport_json,\n",
" row=row)\n",
" else:\n",
" pass"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Burn"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 21,
"outputs": [
{
"data": {
"text/plain": "0it [00:00, ?it/s]",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "f296088669f345c6b20f7ac74f137ae8"
}
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Events\n",
"\n",
"cyberlinks\n",
"\tcyberhole -> Nickname\n",
"\tNickname -> cyberhole\n",
"\tneuron: Name Subgraph Contract\n",
"\n",
"\tcyberhole -> Avatar\n",
"\tAvatar -> cyberhole\n",
"\tneuron: Avatar Subgraph Contract\n",
"\n",
"\n",
"execute\n",
"\texecute contract: Passport Contract\n",
"\texecute contract: Name Subgraph Contract\n",
"\texecute contract: Avatar Subgraph Contract\n",
"\n",
"message from bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf wasm /cosmwasm.wasm.v1.MsgExecuteContract\n",
"\n",
"wasm\n",
"\t_contract_address: Passport Contract\n",
"\taction: burn\n",
"\tsender: bostrom1he3vaq8knkx56tevl6mkel42eddq507mgulsnf\n",
"\ttoken_id: 1415\n",
"Gas used: 381,878\n",
"Tx hash: 23476318EFB8D19BDF644F8DFB81BEFF9C0CA9BB188965FEB5E7E7AE76033C5E\n"
]
}
],
"source": [
"for index, row in tqdm(claims_with_proofs_df[2:NUMBER_OF_ACTIVATED_PARTICIPANTS].iterrows()):\n",
" if index == 2:\n",
" burn_passport_json = contract_utils.burn_passport(row, token_id=get_passport_id(row['bostrom_address']), display_data=DISPLAY_TX_EXECUTION)\n",
" contract_utils.parse_contract_execution_json(burn_passport_json, row=row)\n",
" else:\n",
" pass"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Add tests for Passport contract\n",
"#### create_passport +\n",
"#### update_name\n",
"#### update_avatar\n",
"#### proof_address +\n",
"#### remove_address\n",
"#### set_minter\n",
"#### set_owner\n",
"#### set_active\n",
"#### set_subgraphs\n",
"#### transfer_nft +\n",
"#### send_nft\n",
"#### mint\n",
"#### burn +\n",
"#### approve\n",
"#### approve_all\n",
"#### revoke\n",
"#### revoke_all\n",
"#### Expirations\n",
"##### at_height\n",
"##### at_time\n",
"##### never\n",
"\n",
"### Add tests for Gift contract\n",
"#### update_owner\n",
"#### update_passport_addr\n",
"#### update_target\n",
"#### register_merkle_root +\n",
"#### claim +\n",
"#### release +\n",
"\n",
"### Add tests for subgraph contract\n",
"#### update_owner\n",
"#### update_executer +\n"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
cw-cyber/contracts/cw-cyber-gift/testdata/generate_test_data/gift_and_passport_contracts_testing.ipynb
ฯ 0.0%