Skip to content

Commit 4ad065d

Browse files
Merge pull request #467 from valory-xyz/offchain-epic
Merge offchain-epic into main
2 parents b705b1c + d64aa0f commit 4ad065d

33 files changed

Lines changed: 2425 additions & 194 deletions

File tree

.github/workflows/release.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
python-version: ${{ matrix.python-versions }}
2020
- uses: maus007/docker-run-action-fork@v1
2121
with:
22-
image: valory/open-autonomy-user:0.21.23
22+
image: valory/open-autonomy-user:0.21.26
2323
options: -v ${{ github.workspace }}:/work
2424
run: |
2525
echo "Pushing Packages"
@@ -44,7 +44,7 @@ jobs:
4444
- name: Set up tag and vars
4545
uses: maus007/docker-run-action-fork@v1
4646
with:
47-
image: valory/open-autonomy-user:0.21.23
47+
image: valory/open-autonomy-user:0.21.26
4848
options: -v ${{ github.workspace }}:/work
4949
run: |
5050
echo "Setting Tag Images"
@@ -64,7 +64,7 @@ jobs:
6464
- uses: maus007/docker-run-action-fork@v1
6565
name: Build Images
6666
with:
67-
image: valory/open-autonomy-user:0.21.23
67+
image: valory/open-autonomy-user:0.21.26
6868
options: -v ${{ github.workspace }}:/work
6969
shell: bash
7070
run: |

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<h1 align="center" style="margin-bottom: 0;">
66
Autonolas AI Mechs
77
<br><a href="./LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/github/license/valory-xyz/mech"></a>
8-
<a href="https://pypi.org/project/open-autonomy/0.21.23/"><img alt="Framework: Open Autonomy 0.21.23" src="https://img.shields.io/badge/framework-Open%20Autonomy%200.21.23-blueviolet"></a>
8+
<a href="https://pypi.org/project/open-autonomy/0.21.26/"><img alt="Framework: Open Autonomy 0.21.26" src="https://img.shields.io/badge/framework-Open%20Autonomy%200.21.26-blueviolet"></a>
99
<!-- <a href="https://github.com/valory-xyz/mech/releases/latest">
1010
<img alt="Latest release" src="https://img.shields.io/github/v/release/valory-xyz/mech"> -->
1111
</a>

packages/packages.json

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
{
22
"dev": {
33
"protocol/valory/websocket_client/0.1.0": "bafybeig6omutaqt5rbvidju4zc7pwwdi6tkagwu3dwiirosadyoo534v3q",
4-
"contract/valory/balance_tracker/0.1.0": "bafybeibb7bzedhht262sn2t4vklcjcaa5fibermmcepnqi2wrcorkyz4qa",
4+
"contract/valory/balance_tracker/0.1.0": "bafybeiayyxl643qfpw57vopytxgyd6flxxmwassswuxen7myekqaxdxxvi",
5+
"contract/valory/balance_tracker_fixed_price_native/0.1.0": "bafybeihyaxqkyw2ulroqlhpfcgkrwtrwkhshn35fdq2ystraezwyco3k4u",
56
"contract/valory/complementary_service_metadata/0.1.0": "bafybeihukaditdbnvhkxnt2bfqtclfnniw6l2dwks4dx3hhzlvt46ilduq",
6-
"contract/valory/hash_checkpoint/0.1.0": "bafybeicvml7stv45k5ix44kc2c3xowxvl6m6pzosrkwbxq3ymnnju5g7oe",
7-
"contract/valory/olas_mech/0.1.0": "bafybeifvxzldiclpk7ztinivtjaf3y7yfrkw677y73tb2cukkywbagawc4",
7+
"contract/valory/hash_checkpoint/0.1.0": "bafybeih76qkq55amfkgqewmfzrqpffmgcg7aurgnpjhpzkhh6ek7i5mh3m",
8+
"contract/valory/olas_mech/0.1.0": "bafybeigwnetiwhhvcdjmda2nmd2n35alytq5ftf7qionibht2sfgsl3rpm",
89
"connection/valory/websocket_client/0.1.0": "bafybeid4cnbjpmzcsw3usg7umufgqyod2u3xfw5uso3vukt3n5hfuxvdea",
910
"skill/valory/contract_subscription/0.1.0": "bafybeicqlkmfpttw4hbbaakr6xos62rd6ytjwkyzlfli4xpvl5yqcycf6q",
10-
"skill/valory/delivery_rate_abci/0.1.0": "bafybeiaefr3eiajklnb6m4jtl7rpxr5t2lmrpizfy7gqkjem3qiewo7cz4",
11-
"skill/valory/mech_abci/0.1.0": "bafybeifqmjqfdhs3beaswozr6zugsst43tq6ias7chg5tjayekcr7e45ai",
12-
"skill/valory/task_execution/0.1.0": "bafybeifc56wu5xwjpjhfstgm6wbf6yptshhfbpqji7dsrtrdukkumiwwpq",
13-
"skill/valory/task_submission_abci/0.1.0": "bafybeict3okafrtmy3hjnz2rlrcjjf5e2y7goqy5zr4svrvic2mlt54q2u",
11+
"skill/valory/delivery_rate_abci/0.1.0": "bafybeiathwdfpcfqbipqbkslv6j22q5cvov4n3czmehzij3czrhdnlg42e",
12+
"skill/valory/mech_abci/0.1.0": "bafybeib33ygqjlxsw4sl7t56zdlsui6kukk2wz6gspddrof2c3pjeisyem",
13+
"skill/valory/task_execution/0.1.0": "bafybeib4ca677b4fbvtcf2zpfxjr7aob55qeuo7hhqjeenvhfs7ob7cujq",
14+
"skill/valory/task_submission_abci/0.1.0": "bafybeie4gnqfzbizxqgpn56qgqkw76z23cj3kuued2dsysoampe7s4y5ou",
1415
"skill/valory/websocket_client/0.1.0": "bafybeid6oyycsrvk4duftffs5mrfgmcepibt3qe4om3kfzhwhilfq3ynay",
15-
"agent/valory/mech/0.1.0": "bafybeiexugogtn7crjto2yxfwqj76y7w66cv7pabzdgjr3x5obztvjlemu",
16-
"service/valory/mech/0.1.0": "bafybeiazqc66bhsw6gaw5eg2kng3utmlh654l6ymuumfdwnl65cwlplk2e"
16+
"agent/valory/mech/0.1.0": "bafybeigmprmqsw4rga2yx4xjouysasyreym52lwl2ol7of7zou7wai3mju",
17+
"service/valory/mech/0.1.0": "bafybeihptuvknnbiap4qxi2jwxt5t7okj7t227xocp5jsywnqyskmbzhly"
1718
},
1819
"third_party": {
1920
"protocol/open_aea/signing/1.0.0": "bafybeifsjmldwyki3beqyvdt5lzenrg6wyrqaar5plc5rpnvtc4zlentye",
@@ -26,24 +27,24 @@
2627
"protocol/valory/kv_store/0.1.0": "bafybeidlfrgv5rc7m7kj3j6u6umogmpy5bgcdzqtnsy3v75wn3likvyt6m",
2728
"protocol/valory/ledger_api/1.0.0": "bafybeiecq56phjfws36rgrefw6niyo4ezesloodsfis647mpm5ygqo4ysi",
2829
"protocol/valory/tendermint/0.1.0": "bafybeihzb7e32f7jcrzvubilqaxzmyk7ea6ss3pg3tliatdlrr76qeknyq",
29-
"contract/valory/multisend/0.1.0": "bafybeidl74hh6g34kgxay3fzapz26dhfmc6s2kjnt6edmaxgrklhge3omy",
30-
"contract/valory/gnosis_safe_proxy_factory/0.1.0": "bafybeifzd3duzsvbl76wzippvkqqvtn3shf7p57n43ffduxbsdreu3q4oy",
31-
"contract/valory/service_registry/0.1.0": "bafybeihktixbuw7dz3oa2xzfvpuchbnid7eob224n3spm77xx2yj2wixcm",
32-
"contract/valory/gnosis_safe/0.1.0": "bafybeif6cfjeruji2ovns6dhc5qivvjr7t7rh5mmudgh5gvumezin26qne",
33-
"contract/valory/erc20/0.1.0": "bafybeig4tin5v5ahiiz4fysocl7gjhpjtgzko3w6cr2iz3q5a4bxutwewu",
34-
"contract/valory/mech_marketplace/0.1.0": "bafybeifwx6owth25ud4pknu2s2vcxitt3w2eotjkavmwksdhmur2xd5qgy",
30+
"contract/valory/multisend/0.1.0": "bafybeifqtf24h7lhhbairveqmq2klhvbswajmbpoyqj4xrgye7c22pxubi",
31+
"contract/valory/gnosis_safe_proxy_factory/0.1.0": "bafybeigr6ugkp6bxwnbkecktotekcjihabb6eudh3bgcnjfdorwosygile",
32+
"contract/valory/service_registry/0.1.0": "bafybeicbfffywnaaehptzasxsdoyguuurpleirsnor5xf7rqk57isjkury",
33+
"contract/valory/gnosis_safe/0.1.0": "bafybeiek7zs3r5c4wspwwuvnhunc2ddvccbsuy3xccedbjffju5eywp3ju",
34+
"contract/valory/erc20/0.1.0": "bafybeibpuyikvpmtaraca4lqokf3kf6jlpmafkqm6oixnps3ig23jfbllq",
35+
"contract/valory/mech_marketplace/0.1.0": "bafybeigrcnjaycggulxyx2tsjub4ssjij66d7nfzsavo6gd54hm7beliiu",
3536
"connection/valory/http_client/0.23.0": "bafybeihel6sg2yayxu7lqygaswdgciaxpqrgsbl5rwx74c6znu5qz2edd4",
3637
"connection/valory/p2p_libp2p_client/0.1.0": "bafybeielj3jso3wvrarp5n5rq7llpw4vgxybqiyensgjalb5ubfiawwhhu",
3738
"connection/valory/ledger/0.19.0": "bafybeicynh5l5f5f5jpx72qwzis7jvmxk5p4eqltk32uxbj2pgu2x4rqz4",
3839
"connection/valory/http_server/0.22.0": "bafybeihs6dufyaa5l4uorplzx3wiyna5qlq2x43tmyl3yonkl265vspdle",
3940
"connection/valory/abci/0.1.0": "bafybeiafvaguchnkp2fmhf6gtayc3gpnxkglagghb4ukbqtouni5tveigi",
40-
"connection/valory/ipfs/0.1.0": "bafybeihxytzo7tunodztv424xsnnufewbowucdsxtdzdcik2rskcn7plta",
41+
"connection/valory/ipfs/0.1.0": "bafybeidob3tcdebjbm4ovwqoz4v2egf7nvoui3hu5on4o3apfchr6rpwwa",
4142
"connection/valory/kv_store/0.1.0": "bafybeib2tvoui6kndvrd2gpvs55rizpjee7mqjtjsfbr6fdp5hxslh6gd4",
4243
"skill/valory/abstract_abci/0.1.0": "bafybeie5et43th2nta76cd3kpm3fmurd7oyzk3qxim76octvt56m6r2poi",
43-
"skill/valory/abstract_round_abci/0.1.0": "bafybeicioxhbhnsoqyqvkeevd7df7r2vubbiglyf7ucps2el73objazjsq",
44-
"skill/valory/transaction_settlement_abci/0.1.0": "bafybeibv3tycpdhphlblu62zpcbjsj7hnwkutexxqagorkelhjlt4t4fii",
45-
"skill/valory/registration_abci/0.1.0": "bafybeihjhbn5seffyu5cwugvm26fkamp3svhggmtzh577daijgl2ksxs3e",
46-
"skill/valory/reset_pause_abci/0.1.0": "bafybeihc4ruh25s7wuunfy2b3k2n4eypyhvtry3usgom44wsymagbcr3ki",
47-
"skill/valory/termination_abci/0.1.0": "bafybeibnnzry5kknci3z46gcjgutv4jid3ir6xn6a5adq3tx6v2e25augq"
44+
"skill/valory/abstract_round_abci/0.1.0": "bafybeifkxnvvgsldkb4rgejsoon2mvrmrnl7asy2nhenwss7hpwg3myflu",
45+
"skill/valory/transaction_settlement_abci/0.1.0": "bafybeihizaapype5sz7vlosms3nfo6jzfj4ujycuf5uthviq2otvmw6f6m",
46+
"skill/valory/registration_abci/0.1.0": "bafybeif4n2esdjvquomdkwktv7eolepskpo5jlqrfda2abxjqzy2ljsxzi",
47+
"skill/valory/reset_pause_abci/0.1.0": "bafybeifrnmlscfiki7wojs6zasppefupd2wkjyq6orhdllfppjud7isrxi",
48+
"skill/valory/termination_abci/0.1.0": "bafybeih6sa2ttcvvjk7rcfn7ure2ws23kcfufssb4qmluzcfvednkfpvoi"
4849
}
4950
}

packages/valory/agents/mech/aea-config.yaml

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ connections:
1010
- valory/abci:0.1.0:bafybeiafvaguchnkp2fmhf6gtayc3gpnxkglagghb4ukbqtouni5tveigi
1111
- valory/http_client:0.23.0:bafybeihel6sg2yayxu7lqygaswdgciaxpqrgsbl5rwx74c6znu5qz2edd4
1212
- valory/http_server:0.22.0:bafybeihs6dufyaa5l4uorplzx3wiyna5qlq2x43tmyl3yonkl265vspdle
13-
- valory/ipfs:0.1.0:bafybeihxytzo7tunodztv424xsnnufewbowucdsxtdzdcik2rskcn7plta
13+
- valory/ipfs:0.1.0:bafybeidob3tcdebjbm4ovwqoz4v2egf7nvoui3hu5on4o3apfchr6rpwwa
1414
- valory/ledger:0.19.0:bafybeicynh5l5f5f5jpx72qwzis7jvmxk5p4eqltk32uxbj2pgu2x4rqz4
1515
- valory/p2p_libp2p_client:0.1.0:bafybeielj3jso3wvrarp5n5rq7llpw4vgxybqiyensgjalb5ubfiawwhhu
1616
- valory/websocket_client:0.1.0:bafybeid4cnbjpmzcsw3usg7umufgqyod2u3xfw5uso3vukt3n5hfuxvdea
1717
contracts:
18-
- valory/olas_mech:0.1.0:bafybeifvxzldiclpk7ztinivtjaf3y7yfrkw677y73tb2cukkywbagawc4
18+
- valory/olas_mech:0.1.0:bafybeigwnetiwhhvcdjmda2nmd2n35alytq5ftf7qionibht2sfgsl3rpm
1919
- valory/complementary_service_metadata:0.1.0:bafybeihukaditdbnvhkxnt2bfqtclfnniw6l2dwks4dx3hhzlvt46ilduq
20-
- valory/gnosis_safe:0.1.0:bafybeif6cfjeruji2ovns6dhc5qivvjr7t7rh5mmudgh5gvumezin26qne
21-
- valory/gnosis_safe_proxy_factory:0.1.0:bafybeifzd3duzsvbl76wzippvkqqvtn3shf7p57n43ffduxbsdreu3q4oy
22-
- valory/hash_checkpoint:0.1.0:bafybeicvml7stv45k5ix44kc2c3xowxvl6m6pzosrkwbxq3ymnnju5g7oe
23-
- valory/multisend:0.1.0:bafybeidl74hh6g34kgxay3fzapz26dhfmc6s2kjnt6edmaxgrklhge3omy
24-
- valory/service_registry:0.1.0:bafybeihktixbuw7dz3oa2xzfvpuchbnid7eob224n3spm77xx2yj2wixcm
25-
- valory/mech_marketplace:0.1.0:bafybeifwx6owth25ud4pknu2s2vcxitt3w2eotjkavmwksdhmur2xd5qgy
26-
- valory/balance_tracker:0.1.0:bafybeibb7bzedhht262sn2t4vklcjcaa5fibermmcepnqi2wrcorkyz4qa
27-
- valory/erc20:0.1.0:bafybeig4tin5v5ahiiz4fysocl7gjhpjtgzko3w6cr2iz3q5a4bxutwewu
20+
- valory/gnosis_safe:0.1.0:bafybeiek7zs3r5c4wspwwuvnhunc2ddvccbsuy3xccedbjffju5eywp3ju
21+
- valory/gnosis_safe_proxy_factory:0.1.0:bafybeigr6ugkp6bxwnbkecktotekcjihabb6eudh3bgcnjfdorwosygile
22+
- valory/hash_checkpoint:0.1.0:bafybeih76qkq55amfkgqewmfzrqpffmgcg7aurgnpjhpzkhh6ek7i5mh3m
23+
- valory/multisend:0.1.0:bafybeifqtf24h7lhhbairveqmq2klhvbswajmbpoyqj4xrgye7c22pxubi
24+
- valory/service_registry:0.1.0:bafybeicbfffywnaaehptzasxsdoyguuurpleirsnor5xf7rqk57isjkury
25+
- valory/mech_marketplace:0.1.0:bafybeigrcnjaycggulxyx2tsjub4ssjij66d7nfzsavo6gd54hm7beliiu
26+
- valory/balance_tracker:0.1.0:bafybeiayyxl643qfpw57vopytxgyd6flxxmwassswuxen7myekqaxdxxvi
27+
- valory/erc20:0.1.0:bafybeibpuyikvpmtaraca4lqokf3kf6jlpmafkqm6oixnps3ig23jfbllq
2828
protocols:
2929
- open_aea/signing:1.0.0:bafybeifsjmldwyki3beqyvdt5lzenrg6wyrqaar5plc5rpnvtc4zlentye
3030
- valory/abci:0.1.0:bafybeiak4pwac3pwjtd7weskxdhkrcopckr32vtazfbuteu6yqjkwarpte
@@ -38,16 +38,16 @@ protocols:
3838
- valory/websocket_client:0.1.0:bafybeig6omutaqt5rbvidju4zc7pwwdi6tkagwu3dwiirosadyoo534v3q
3939
skills:
4040
- valory/abstract_abci:0.1.0:bafybeie5et43th2nta76cd3kpm3fmurd7oyzk3qxim76octvt56m6r2poi
41-
- valory/abstract_round_abci:0.1.0:bafybeicioxhbhnsoqyqvkeevd7df7r2vubbiglyf7ucps2el73objazjsq
41+
- valory/abstract_round_abci:0.1.0:bafybeifkxnvvgsldkb4rgejsoon2mvrmrnl7asy2nhenwss7hpwg3myflu
4242
- valory/contract_subscription:0.1.0:bafybeicqlkmfpttw4hbbaakr6xos62rd6ytjwkyzlfli4xpvl5yqcycf6q
43-
- valory/mech_abci:0.1.0:bafybeifqmjqfdhs3beaswozr6zugsst43tq6ias7chg5tjayekcr7e45ai
44-
- valory/registration_abci:0.1.0:bafybeihjhbn5seffyu5cwugvm26fkamp3svhggmtzh577daijgl2ksxs3e
45-
- valory/reset_pause_abci:0.1.0:bafybeihc4ruh25s7wuunfy2b3k2n4eypyhvtry3usgom44wsymagbcr3ki
46-
- valory/delivery_rate_abci:0.1.0:bafybeiaefr3eiajklnb6m4jtl7rpxr5t2lmrpizfy7gqkjem3qiewo7cz4
47-
- valory/task_execution:0.1.0:bafybeifc56wu5xwjpjhfstgm6wbf6yptshhfbpqji7dsrtrdukkumiwwpq
48-
- valory/task_submission_abci:0.1.0:bafybeict3okafrtmy3hjnz2rlrcjjf5e2y7goqy5zr4svrvic2mlt54q2u
49-
- valory/termination_abci:0.1.0:bafybeibnnzry5kknci3z46gcjgutv4jid3ir6xn6a5adq3tx6v2e25augq
50-
- valory/transaction_settlement_abci:0.1.0:bafybeibv3tycpdhphlblu62zpcbjsj7hnwkutexxqagorkelhjlt4t4fii
43+
- valory/mech_abci:0.1.0:bafybeib33ygqjlxsw4sl7t56zdlsui6kukk2wz6gspddrof2c3pjeisyem
44+
- valory/registration_abci:0.1.0:bafybeif4n2esdjvquomdkwktv7eolepskpo5jlqrfda2abxjqzy2ljsxzi
45+
- valory/reset_pause_abci:0.1.0:bafybeifrnmlscfiki7wojs6zasppefupd2wkjyq6orhdllfppjud7isrxi
46+
- valory/delivery_rate_abci:0.1.0:bafybeiathwdfpcfqbipqbkslv6j22q5cvov4n3czmehzij3czrhdnlg42e
47+
- valory/task_execution:0.1.0:bafybeib4ca677b4fbvtcf2zpfxjr7aob55qeuo7hhqjeenvhfs7ob7cujq
48+
- valory/task_submission_abci:0.1.0:bafybeie4gnqfzbizxqgpn56qgqkw76z23cj3kuued2dsysoampe7s4y5ou
49+
- valory/termination_abci:0.1.0:bafybeih6sa2ttcvvjk7rcfn7ure2ws23kcfufssb4qmluzcfvednkfpvoi
50+
- valory/transaction_settlement_abci:0.1.0:bafybeihizaapype5sz7vlosms3nfo6jzfj4ujycuf5uthviq2otvmw6f6m
5151
- valory/websocket_client:0.1.0:bafybeid6oyycsrvk4duftffs5mrfgmcepibt3qe4om3kfzhwhilfq3ynay
5252
default_ledger: ethereum
5353
required_ledgers:
@@ -92,13 +92,13 @@ dependencies:
9292
version: '>=6'
9393
multidict: {}
9494
open-aea-cli-ipfs:
95-
version: ==2.2.7
95+
version: ==2.2.9
9696
open-aea-ledger-cosmos:
97-
version: ==2.2.7
97+
version: ==2.2.9
9898
open-aea-ledger-ethereum:
99-
version: ==2.2.7
99+
version: ==2.2.9
100100
open-aea-test-autonomy:
101-
version: ==0.21.23
101+
version: ==0.21.26
102102
openapi-core:
103103
version: <0.23,>=0.22
104104
openapi-spec-validator:

packages/valory/contracts/balance_tracker/build/BalanceTracker.json

Lines changed: 67 additions & 4 deletions
Large diffs are not rendered by default.

packages/valory/contracts/balance_tracker/contract.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,19 @@ def get_process_payment_tx(
134134
ledger_api, contract_address, sender_address, tx_data
135135
).pop("data")
136136
return {"data": bytes.fromhex(tx_data[2:]), "simulation_ok": simulation_ok} # type: ignore
137+
138+
@classmethod
139+
def build_deposit_for_data(
140+
cls,
141+
ledger_api: EthereumApi,
142+
contract_address: str,
143+
account: str,
144+
amount: int,
145+
) -> JSONLike:
146+
"""Encode depositFor(account, amount) for a Safe multisend batch."""
147+
contract_instance = cls.get_instance(ledger_api, contract_address)
148+
data = contract_instance.encode_abi(
149+
abi_element_identifier="depositFor",
150+
args=[account, amount],
151+
)
152+
return {"data": bytes.fromhex(data[2:])} # type: ignore

packages/valory/contracts/balance_tracker/contract.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ license: Apache-2.0
77
aea_version: '>=2.0.0, <3.0.0'
88
fingerprint:
99
__init__.py: bafybeigim3df7lcxmr4gjugo73fyrwfkkpll7jykgjp7nij6ugbkc7igyy
10-
build/BalanceTracker.json: bafybeide7fhlz2x56wiroancnk4n5grgl2wginv52ybhg5bsgubcokw3yu
11-
contract.py: bafybeigmh3gtqsixhrfa735gtuzrem77hluq76ekbxa2mxwfv6cfmo5yvm
10+
build/BalanceTracker.json: bafybeig2ywevvapgqoprxnnkid3atvq6qg7aqfhyd2uvqokdnydcfp2is4
11+
contract.py: bafybeiffqbk4qv7k6uonxwwznfedx6jo63lcyqyp5qgbcbv2zvos24yz7u
12+
tests/__init__.py: bafybeicrl6tanguy6dyh7lu7lptym5nclaqyhf3j3i32ykfsz7vvrz2snm
13+
tests/test_contract.py: bafybeihjlnu6iazwxnd4ojapr3t5ygztaeqjmuk4lyacgi4gzkqg3oly2y
1214
fingerprint_ignore_patterns: []
1315
class_name: BalanceTrackerContract
1416
contract_interface_paths:
1517
ethereum: build/BalanceTracker.json
1618
dependencies:
1719
open-aea-ledger-ethereum:
18-
version: ==2.2.7
20+
version: ==2.2.9
1921
contracts: []
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- coding: utf-8 -*-
2+
# ------------------------------------------------------------------------------
3+
#
4+
# Copyright 2026 Valory AG
5+
#
6+
# Licensed under the Apache License, Version 2.0 (the "License");
7+
# you may not use this file except in compliance with the License.
8+
# You may obtain a copy of the License at
9+
#
10+
# http://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
#
18+
# ------------------------------------------------------------------------------
19+
20+
"""Tests for the balance_tracker contract package."""
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# -*- coding: utf-8 -*-
2+
# ------------------------------------------------------------------------------
3+
#
4+
# Copyright 2026 Valory AG
5+
#
6+
# Licensed under the Apache License, Version 2.0 (the "License");
7+
# you may not use this file except in compliance with the License.
8+
# You may obtain a copy of the License at
9+
#
10+
# http://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
#
18+
# ------------------------------------------------------------------------------
19+
20+
"""Encode-assertion tests for the balance_tracker contract package."""
21+
22+
import json
23+
from pathlib import Path
24+
from unittest.mock import patch
25+
26+
from web3 import Web3
27+
28+
from packages.valory.contracts.balance_tracker.contract import BalanceTrackerContract
29+
30+
_ABI_PATH = Path(__file__).parent.parent / "build" / "BalanceTracker.json"
31+
_ACCOUNT = "0x1000000000000000000000000000000000000001"
32+
_AMOUNT = 12345
33+
_DEPOSIT_FOR_SELECTOR = "2f4f21e2"
34+
35+
36+
def _web3_contract() -> object:
37+
"""Build a Web3 contract instance from the packaged ABI."""
38+
with open(_ABI_PATH) as f:
39+
artifact = json.load(f)
40+
return Web3().eth.contract(abi=artifact["abi"])
41+
42+
43+
class TestBuildDepositForData:
44+
"""`build_deposit_for_data` produces well-formed `depositFor(account, amount)` calldata."""
45+
46+
def test_calldata_starts_with_deposit_for_selector(self) -> None:
47+
"""The 4-byte selector matches keccak256("depositFor(address,uint256)")[:4]."""
48+
with patch.object(
49+
BalanceTrackerContract, "get_instance", return_value=_web3_contract()
50+
):
51+
result = BalanceTrackerContract.build_deposit_for_data(
52+
ledger_api=None, # patched away
53+
contract_address="0x0000000000000000000000000000000000000000",
54+
account=_ACCOUNT,
55+
amount=_AMOUNT,
56+
)
57+
assert result["data"][:4].hex() == _DEPOSIT_FOR_SELECTOR
58+
59+
def test_calldata_has_expected_length(self) -> None:
60+
"""4-byte selector + 32-byte address + 32-byte uint256 = 68 bytes."""
61+
with patch.object(
62+
BalanceTrackerContract, "get_instance", return_value=_web3_contract()
63+
):
64+
result = BalanceTrackerContract.build_deposit_for_data(
65+
ledger_api=None,
66+
contract_address="0x0000000000000000000000000000000000000000",
67+
account=_ACCOUNT,
68+
amount=_AMOUNT,
69+
)
70+
assert len(result["data"]) == 68
71+
72+
def test_calldata_encodes_amount_argument(self) -> None:
73+
"""The last 32 bytes decode to the supplied amount."""
74+
with patch.object(
75+
BalanceTrackerContract, "get_instance", return_value=_web3_contract()
76+
):
77+
result = BalanceTrackerContract.build_deposit_for_data(
78+
ledger_api=None,
79+
contract_address="0x0000000000000000000000000000000000000000",
80+
account=_ACCOUNT,
81+
amount=_AMOUNT,
82+
)
83+
assert int.from_bytes(result["data"][-32:], "big") == _AMOUNT

0 commit comments

Comments
 (0)