diff --git a/.gitignore b/.gitignore index f5e564e4ff..39268bad97 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ release/ /build /coverage.txt __pycache__ +/dist # nix /result diff --git a/CHANGELOG.md b/CHANGELOG.md index 90439fd0da..4e43e6a95c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,9 @@ - [cronos#11](https://github.com/crypto-org-chain/cronos/pull/11) embed gravity bridge module - [cronos#35](https://github.com/crypto-org-chain/cronos/pull/35) add support for ibc hook - [cronos#55](https://github.com/crypto-org-chain/cronos/pull/55) add support for ibc token conversion to crc20 - -- [cronos#45](https://github.com/crypto-org-chain/cronos/pull/45) Allow evm contract to call bank send and gravity send +- [cronos#45](https://github.com/crypto-org-chain/cronos/pull/45) Allow evm contract to call bank send and gravity send +- [cronos#59](https://github.com/crypto-org-chain/cronos/pull/59) gravity bridged tokens are converted to crc20 + automatically *August 19, 2021* diff --git a/app/app.go b/app/app.go index 26b5101eba..3115ac5626 100644 --- a/app/app.go +++ b/app/app.go @@ -391,6 +391,16 @@ func New( tracer, bApp.Trace(), // debug EVM based on Baseapp options ) + gravityKeeper := gravitykeeper.NewKeeper( + appCodec, + keys[gravitytypes.StoreKey], + app.GetSubspace(gravitytypes.ModuleName), + app.AccountKeeper, + stakingKeeper, + app.BankKeeper, + app.SlashingKeeper, + sdk.DefaultPowerReduction, + ) // this line is used by starport scaffolding # stargate/app/keeperDefinition app.CronosKeeper = *cronosmodulekeeper.NewKeeper( @@ -400,6 +410,7 @@ func New( app.GetSubspace(cronosmoduletypes.ModuleName), app.BankKeeper, app.TransferKeeper, + gravityKeeper, app.EvmKeeper, ) cronosModule := cronosmodule.NewAppModule(appCodec, app.CronosKeeper) @@ -413,17 +424,6 @@ func New( &stakingKeeper, govRouter, ) - gravityKeeper := gravitykeeper.NewKeeper( - appCodec, - keys[gravitytypes.StoreKey], - app.GetSubspace(gravitytypes.ModuleName), - app.AccountKeeper, - stakingKeeper, - app.BankKeeper, - app.SlashingKeeper, - sdk.DefaultPowerReduction, - ) - app.GravityKeeper = *gravityKeeper.SetHooks(app.CronosKeeper) app.EvmKeeper.SetHooks(cronosmodulekeeper.NewLogProcessEvmHook( diff --git a/contracts/src/ModuleCRC20.sol b/contracts/src/ModuleCRC20.sol index efed0819e0..b1bbc18451 100644 --- a/contracts/src/ModuleCRC20.sol +++ b/contracts/src/ModuleCRC20.sol @@ -14,6 +14,15 @@ contract ModuleCRC20 is DSToken { denom = denom_; } + // unsafe_burn burn tokens without user's approval and authentication, used internally + function unsafe_burn(address addr, uint amount) private { + // Deduct user's balance without approval + require(balanceOf[addr] >= amount, "ds-token-insufficient-balance"); + balanceOf[addr] = sub(balanceOf[addr], amount); + totalSupply = sub(totalSupply, amount); + emit Burn(addr, amount); + } + function native_denom() public view returns (string memory) { return denom; } @@ -25,16 +34,12 @@ contract ModuleCRC20 is DSToken { function burn_by_cronos_module(address addr, uint amount) public { require(msg.sender == module_address); - // Deduct user's balance without approval - require(balanceOf[addr] >= amount, "ds-token-insufficient-balance"); - balanceOf[addr] = sub(balanceOf[addr], amount); - totalSupply = sub(totalSupply, amount); - emit Burn(addr, amount); + unsafe_burn(addr, amount); } // send to ethereum through gravity bridge - function send_to_ethereum(address recipient, uint amount, uint bridge_fee) public { - burn(msg.sender, add(amount, bridge_fee)); + function send_to_ethereum(address recipient, uint amount, uint bridge_fee) external { + unsafe_burn(msg.sender, add(amount, bridge_fee)); emit __CronosSendToEthereum(recipient, amount, bridge_fee); } } diff --git a/go.mod b/go.mod index c699a52854..2ee463b024 100644 --- a/go.mod +++ b/go.mod @@ -5,9 +5,10 @@ go 1.16 require ( github.com/armon/go-metrics v0.3.9 github.com/cosmos/cosmos-sdk v0.44.0 - github.com/cosmos/ibc-go v1.0.1 + github.com/cosmos/ibc-go v1.1.0 github.com/ethereum/go-ethereum v1.10.3 github.com/gogo/protobuf v1.3.3 + github.com/golang/protobuf v1.5.2 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/peggyjv/gravity-bridge/module v0.2.0 @@ -18,8 +19,8 @@ require ( github.com/tendermint/spm v0.0.0-20210524110815-6d7452d2dc4a github.com/tendermint/tendermint v0.34.12 github.com/tendermint/tm-db v0.6.4 - github.com/tharsis/ethermint v0.4.2-0.20210902174739-5fac39db38ed - google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda + github.com/tharsis/ethermint v0.4.2-0.20210905110306-26c5eabb1893 + google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 google.golang.org/grpc v1.40.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -33,3 +34,6 @@ replace github.com/99designs/keyring => github.com/crypto-org-chain/keyring v1.1 // TODO: remove when middleware will be implemented replace github.com/cosmos/ibc-go => github.com/crypto-org-chain/ibc-go v1.0.1-hooks + +// FIXME: update after PR merged: https://github.com/PeggyJV/gravity-bridge/pull/182 +replace github.com/peggyjv/gravity-bridge/module => github.com/yihuang/gravity-bridge/module v0.1.22-0.20210908191543-71021d1bfff2 diff --git a/go.sum b/go.sum index c28481c599..5e1f4ee4ad 100644 --- a/go.sum +++ b/go.sum @@ -67,6 +67,11 @@ github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t github.com/DataDog/zstd v1.4.8 h1:Rpmta4xZ/MgZnriKNd24iZMhGpP5dvUcs/uqfBapKZY= github.com/DataDog/zstd v1.4.8/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -94,6 +99,8 @@ github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKS github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/aokoli/goutils v1.1.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -158,9 +165,8 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= -github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= @@ -225,24 +231,22 @@ github.com/crypto-org-chain/keyring v1.1.6-fixes/go.mod h1:0mkLWIoZuQ7uBoospo5Q9 github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= -github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= -github.com/dgraph-io/badger/v2 v2.2007.3 h1:Sl9tQWz92WCbVSe8pj04Tkqlm2boW+KAxd+XSs58SQI= -github.com/dgraph-io/badger/v2 v2.2007.3/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -271,6 +275,8 @@ github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 h1:2vLKys4RBU4 github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25/go.mod h1:hTr8+TLQmkUkgcuh3mcr5fjrT9c64ZzsBCdCEC6UppY= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.3.0-java/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.1/go.mod h1:txg5va2Qkip90uYoSKH+nkAAmXrb2j3iq4FLwdrCbXQ= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/ethereum/go-ethereum v1.10.1/go.mod h1:E5e/zvdfUVr91JZ0AwjyuJM3x+no51zZJRz61orLLSk= github.com/ethereum/go-ethereum v1.10.3 h1:SEYOYARvbWnoDl1hOSks3ZJQpRiiRJe8ubaQGJQwq0s= @@ -352,8 +358,6 @@ github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529 h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -391,9 +395,8 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= @@ -409,9 +412,8 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= @@ -434,6 +436,7 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/protobuf v3.14.0+incompatible/go.mod h1:lUQ9D1ePzbH2PrIS7ob/bjm9HXyH5WHB0Akwh7URreM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -489,9 +492,8 @@ github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE= -github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= @@ -522,14 +524,19 @@ github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iU github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goupnp v1.0.1-0.20200620063722-49508fba0031/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88 h1:bcAj8KroPf552TScjFPIakjH2/tdIrIH8F+cc4v4SRo= github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/improbable-eng/grpc-web v0.14.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= @@ -629,6 +636,7 @@ github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoR github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lyft/protoc-gen-star v0.5.1/go.mod h1:9toiA3cC7z5uVbODF7kEQ91Xn7XNFkVUl+SrEe+ZORU= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= @@ -663,6 +671,7 @@ github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjK github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -673,6 +682,7 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -685,6 +695,8 @@ github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ib github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.3.2/go.mod h1:ej0Qp0qMgHN/KtDyUt+Q1/tA7a5VarXUOUxD+oeD30w= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= @@ -749,8 +761,6 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/peggyjv/gravity-bridge/module v0.2.0 h1:1sAoILN/KKOSRlrVEu2RzAUYNm5NyNRbA0LnXJSNejY= -github.com/peggyjv/gravity-bridge/module v0.2.0/go.mod h1:gixjqIjdEb0CC0Kp4bLaJRoFSMG+irz3qU6gWwmNHik= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= @@ -771,6 +781,7 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -817,9 +828,10 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= -github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= +github.com/pseudomuto/protoc-gen-doc v1.5.0/go.mod h1:exDTOVwqpp30eV/EDPFLZy3Pwr2sn6hBC1WIYH/UbIg= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -831,9 +843,8 @@ github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNw github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= -github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -879,6 +890,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -918,6 +931,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -954,8 +968,8 @@ github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= -github.com/tharsis/ethermint v0.4.2-0.20210902174739-5fac39db38ed h1:tJoRSbvnKkueMUuFOgfGK7svOjvnkqNP5STRgsTF8As= -github.com/tharsis/ethermint v0.4.2-0.20210902174739-5fac39db38ed/go.mod h1:Vvn8Ml0LJ3NsDGLnxzwHp9lnrr6j3r2DHutR10iDyME= +github.com/tharsis/ethermint v0.4.2-0.20210905110306-26c5eabb1893 h1:qdqNQu1o5CsoKAPFt2obcXNweWk0NLoKnVXHl4Fe16c= +github.com/tharsis/ethermint v0.4.2-0.20210905110306-26c5eabb1893/go.mod h1:zOdTIdI2jrKoVthxJ73yflOxh8xz0bsiBFV91IIlFMQ= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -994,6 +1008,8 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yihuang/gravity-bridge/module v0.1.22-0.20210908191543-71021d1bfff2 h1:kkRZ8fh+bfreRmPDPgtUuCc9yZMcIa9lNs9molc2jfo= +github.com/yihuang/gravity-bridge/module v0.1.22-0.20210908191543-71021d1bfff2/go.mod h1:gixjqIjdEb0CC0Kp4bLaJRoFSMG+irz3qU6gWwmNHik= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1032,6 +1048,7 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1173,6 +1190,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1185,7 +1203,6 @@ golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1386,6 +1403,7 @@ google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1434,8 +1452,8 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda h1:iT5uhT54PtbqUsWddv/nnEWdE5e/MTr+Nv3vjxlBP1A= -google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.1/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1479,6 +1497,7 @@ gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuv gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6 h1:a6cXbcDDUkSBlpnkWV1bJ+vv3mOgQEltEJ2rPxroVu0= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1509,9 +1528,8 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= -nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/gomod2nix.toml b/gomod2nix.toml index 595136e33d..3ef4ee6d75 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -219,6 +219,30 @@ rev = "9aa49832a739dcd78a5542ff189fb82c3e423116" sha256 = "12klijhq4fckzbhv0cwygbazj6lvhmdqksha9y6jgfmwzv51kwv5" +["github.com/Masterminds/goutils"] + sumVersion = "v1.1.1" + ["github.com/Masterminds/goutils".fetch] + type = "git" + url = "https://github.com/Masterminds/goutils" + rev = "f1923532a168b8203bfe956d8cd3b17ebece5982" + sha256 = "09m4mbcdlv9ng3xcrmjlxi0niavby52y9nl2jhjnbx1xxpjw0jrh" + +["github.com/Masterminds/semver"] + sumVersion = "v1.5.0" + ["github.com/Masterminds/semver".fetch] + type = "git" + url = "https://github.com/Masterminds/semver" + rev = "805c489aa98f412e79eb308a37996bf9d8b1c91e" + sha256 = "1i169xscsxsh8lsw8bz2apnsqixld37xdnfh36i30xy5wnf0iwfx" + +["github.com/Masterminds/sprig"] + sumVersion = "v2.22.0+incompatible" + ["github.com/Masterminds/sprig".fetch] + type = "git" + url = "https://github.com/Masterminds/sprig" + rev = "e4c0945838d570720d876a6ad9b4568ed32317b4" + sha256 = "09dzwhj4zh3p6f1jhyic16n4qdnvpamz7hyk9fycpm4b1jfq63gd" + ["github.com/OneOfOne/xxhash"] sumVersion = "v1.2.2" ["github.com/OneOfOne/xxhash".fetch] @@ -347,6 +371,14 @@ rev = "c3f0ba9c1a592b971d66b2787679af55b5c58f21" sha256 = "1ix08vl49qxr58rc6201cl97g1yznhhkwvqldslawind99js4rj0" +["github.com/aokoli/goutils"] + sumVersion = "v1.1.1" + ["github.com/aokoli/goutils".fetch] + type = "git" + url = "https://github.com/aokoli/goutils" + rev = "f1923532a168b8203bfe956d8cd3b17ebece5982" + sha256 = "09m4mbcdlv9ng3xcrmjlxi0niavby52y9nl2jhjnbx1xxpjw0jrh" + ["github.com/apache/arrow/go/arrow"] sumVersion = "v0.0.0-20191024131854-af6fa24be0db" relPath = "go/arrow" @@ -676,12 +708,12 @@ sha256 = "19fcx3sc99i5dsklny6r073z5j20vlwn2xqm6di1q3b1xwchzqfj" ["github.com/cespare/cp"] - sumVersion = "v1.1.1" + sumVersion = "v0.1.0" ["github.com/cespare/cp".fetch] type = "git" url = "https://github.com/cespare/cp" - rev = "db1407d84ae423533fe1d25510c1c4c4d831f0fc" - sha256 = "0gdsd4kndi4qzbxg4zr0zs46ab8fisgazim2jiacglcnxhhifki7" + rev = "165db2f241fd235aec29ba6d9b1ccd5f1c14637c" + sha256 = "1x76x985q9av29smybpc3g4az2qjmzqw181vp9z38wpbips31nm9" ["github.com/cespare/xxhash"] sumVersion = "v1.1.0" @@ -983,12 +1015,12 @@ sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y" ["github.com/deckarep/golang-set"] - sumVersion = "v1.7.1" + sumVersion = "v0.0.0-20180603214616-504e848d77ea" ["github.com/deckarep/golang-set".fetch] type = "git" url = "https://github.com/deckarep/golang-set" - rev = "cbaa98ba5575e67703b32b4b19f73c91f3c4159e" - sha256 = "0y64c0p6a7ww5jp6adm6fm97vsni86njw8wkwxfmciy466vhl0lf" + rev = "504e848d77ea4752b3057b8fb46da0e7f746ccf3" + sha256 = "0n0dgz82vvwpxh2fp3d9ciawzrwv0w3hsnkk4y7z64pxp27r4k7n" ["github.com/decred/dcrd/lru"] sumVersion = "v1.0.0" @@ -1008,20 +1040,20 @@ sha256 = "1jsy04ga79xbdfn0xqzs7q8gyh2sz9jpfqdsb210m6188yscxck9" ["github.com/dgraph-io/badger/v2"] - sumVersion = "v2.2007.3" + sumVersion = "v2.2007.2" ["github.com/dgraph-io/badger/v2".fetch] type = "git" url = "https://github.com/dgraph-io/badger" - rev = "166e07594bd30ef24518399095331147375f57e3" - sha256 = "0ng56plsk55krv7n03bjnnsmrf7r5npw4binr2p2p3ijyvi723g4" + rev = "d5a25b83fbf4f3f61ff03a9202e36f5b75544426" + sha256 = "0cck8ap61bi56dv070cirkkl6fjavz05kwyxjv08lbfykhlpz3da" ["github.com/dgraph-io/ristretto"] - sumVersion = "v0.1.0" + sumVersion = "v0.0.3" ["github.com/dgraph-io/ristretto".fetch] type = "git" url = "https://github.com/dgraph-io/ristretto" - rev = "1ff978f89ae61dfad7460f12355a5f3ee1e6af13" - sha256 = "0lj1dwfqmk0f83c5jc17xdf3c919b8kgljchjv0l33jvjgxascav" + rev = "bcb54d096f2303ce80960e125b5991ac4d6325c3" + sha256 = "1v29j6b0r87pf5dwsxi3rxa8yavkl3h79i63rbddfd42p2jyssyg" ["github.com/dgrijalva/jwt-go"] sumVersion = "v3.2.0+incompatible" @@ -1168,12 +1200,12 @@ sha256 = "0m0crzx70lp7vz13v20wxb1fcfdnzp7h3mkh3bn6a8mbfz6w5asj" ["github.com/envoyproxy/protoc-gen-validate"] - sumVersion = "v0.1.0" + sumVersion = "v0.6.1" ["github.com/envoyproxy/protoc-gen-validate".fetch] type = "git" url = "https://github.com/envoyproxy/protoc-gen-validate" - rev = "9eff07ddfcb4001aa1aab280648153f46e1a8ddc" - sha256 = "0kxd3wwh3xwqk0r684hsy281xq4y71cd11d4q2hspcjbnlbwh7cy" + rev = "758c5fc3a13b71bdb7e851b0c1ee8f6232e0ce7d" + sha256 = "15x8klgwl98kh81la8j007jfcsx9jxmxrrmys3a7p92pf0k5vzrx" ["github.com/ethereum/go-ethereum"] sumVersion = "v1.10.3" @@ -1522,12 +1554,12 @@ sha256 = "1l09fl449css9bw045c7a35rp5jxgfpbisyn1rb9r4ign7956wi3" ["github.com/golang/glog"] - sumVersion = "v0.0.0-20210429001901-424d2337a529" + sumVersion = "v0.0.0-20160126235308-23def4e6c14b" ["github.com/golang/glog".fetch] type = "git" url = "https://github.com/golang/glog" - rev = "424d2337a5299a465c8a8228fc3ba4b1c28337a2" - sha256 = "1hnbln6h61ik9z92dspybmb0cxpddm1c4dzx5g64jr8cdvqcgpji" + rev = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" + sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30" ["github.com/golang/groupcache"] sumVersion = "v0.0.0-20200121045136-8c9f03a8e57e" @@ -1554,12 +1586,12 @@ sha256 = "1mh5fyim42dn821nsd3afnmgscrzzhn3h8rag635d2jnr23r1zhk" ["github.com/golang/snappy"] - sumVersion = "v0.0.4" + sumVersion = "v0.0.3" ["github.com/golang/snappy".fetch] type = "git" url = "https://github.com/golang/snappy" - rev = "544b4180ac705b7605231d4a4550a1acb22a19fe" - sha256 = "004cw699yz3pdpawhjhpa0y94c4w479nw1rf39zj6h6027kpwv2j" + rev = "674baa8c7fc30da5df3074a459494a7e6b427dff" + sha256 = "1dc8sdca0nrqb8wri91mi2xcjm16wyawm4y0fwc5gp24ahjbrg7g" ["github.com/google/btree"] sumVersion = "v1.0.1" @@ -1578,12 +1610,12 @@ sha256 = "1gl8pnykzifh7pnnvl80f5prmj5ga60dp44inpv9az2k9zaqx3qr" ["github.com/google/go-cmp"] - sumVersion = "v0.5.6" + sumVersion = "v0.5.5" ["github.com/google/go-cmp".fetch] type = "git" url = "https://github.com/google/go-cmp" - rev = "d103655696d8ae43c4125ee61454dbf03d8e8324" - sha256 = "0lrb0pacv5iy3m6fn1qb3nv7zwimfhpzqq8f6hwpwx88cx3g6p1s" + rev = "8fa37b4dd109f12e42b131e485268768f18bcbf8" + sha256 = "12fmkdhyv5d4is8s57k78j097zb0phlgnrkqc03agiszxlid69x7" ["github.com/google/gofuzz"] sumVersion = "v1.1.1-0.20200604201612-c04b05f3adfa" @@ -1813,12 +1845,12 @@ sha256 = "07kx3fhryqmaw3czacmm11qwx63js2q8cfq967vphk7xg9q377kk" ["github.com/hashicorp/go-immutable-radix"] - sumVersion = "v1.3.0" + sumVersion = "v1.0.0" ["github.com/hashicorp/go-immutable-radix".fetch] type = "git" url = "https://github.com/hashicorp/go-immutable-radix" - rev = "57230d80bd59689cded197c5065835b39d890dd0" - sha256 = "0wnnh4q4398ib3h0440dq82x8y89hy3214qdzc2jbbxg95cic0cr" + rev = "27df80928bb34bb1b0d6d0e01b9e679902e7a6b5" + sha256 = "1v3nmsnk1s8bzpclrhirz7iq0g5xxbw9q5gvrg9ss6w9crs72qr6" ["github.com/hashicorp/go-msgpack"] sumVersion = "v0.5.3" @@ -1973,6 +2005,14 @@ rev = "a30252cb686a21eb2d0b98132633053ec2f7f1e5" sha256 = "1njpzc0pi1acg5zx9y6vj9xi6ksbsc5d387rd6904hy6rh2m6kn0" +["github.com/huandu/xstrings"] + sumVersion = "v1.3.2" + ["github.com/huandu/xstrings".fetch] + type = "git" + url = "https://github.com/huandu/xstrings" + rev = "52197b1fb3155666d9613b4eb4ed72a86d1f8ab6" + sha256 = "0pwar6rc0fqb6pll38a44s81g5kb65vbg71jg5lx8caphjnikq5r" + ["github.com/hudl/fargo"] sumVersion = "v1.3.0" ["github.com/hudl/fargo".fetch] @@ -1997,6 +2037,14 @@ rev = "1ca381bf315033e89af3286fdec0109ce8d86126" sha256 = "0alhyacsfqic2wxyqn4gvk9wzjl4pkmy8rhvqjk84xsghgx5xf12" +["github.com/iancoleman/strcase"] + sumVersion = "v0.0.0-20180726023541-3605ed457bf7" + ["github.com/iancoleman/strcase".fetch] + type = "git" + url = "https://github.com/iancoleman/strcase" + rev = "3605ed457bf7f8caa1371b4fafadadc026673479" + sha256 = "0sgxd4ir03kc4k5sk5hc1wmir3m8j20dfwajqwiljgqsz6xkg0j5" + ["github.com/ianlancetaylor/demangle"] sumVersion = "v0.0.0-20200824232613-28f6c0f3b639" ["github.com/ianlancetaylor/demangle".fetch] @@ -2005,6 +2053,14 @@ rev = "28f6c0f3b63983aaa99575ca3b693afff7996387" sha256 = "0rsq3622gd40f1x1l7caidsxrmzg1993ich2higwd94fqbxs1r83" +["github.com/imdario/mergo"] + sumVersion = "v0.3.12" + ["github.com/imdario/mergo".fetch] + type = "git" + url = "https://github.com/imdario/mergo" + rev = "29fb3d3bdc5512887f1dc9aedde6a0fed407fa8f" + sha256 = "15s6807vcm7xq4l6my7rnw1i7x57712jvdidjli5bip79jfaxw90" + ["github.com/improbable-eng/grpc-web"] sumVersion = "v0.14.1" ["github.com/improbable-eng/grpc-web".fetch] @@ -2492,6 +2548,14 @@ rev = "cdb49ff09d77331d3fdd51e862b4023d2257954c" sha256 = "1cby9n647v4gh11mpz1dfscks8n0cw0rj8d2hjh4q9mky4m7jzl1" +["github.com/lyft/protoc-gen-star"] + sumVersion = "v0.5.1" + ["github.com/lyft/protoc-gen-star".fetch] + type = "git" + url = "https://github.com/lyft/protoc-gen-star" + rev = "2fb4b6301f76389e5887ac3c3c12588c79aedfa2" + sha256 = "1nv00hjjlrzn8g27m68bbjw6rsgddn36bbcdk48zfmv98wpcnxwg" + ["github.com/magiconair/properties"] sumVersion = "v1.8.5" ["github.com/magiconair/properties".fetch] @@ -2596,6 +2660,14 @@ rev = "3d22a244be8aa6fb16ac24af0e195c08b7d973aa" sha256 = "1i9kmr7rcf10d2hji8h4247hmc0nbairv7a0q51393aw2h1bnwg2" +["github.com/mitchellh/copystructure"] + sumVersion = "v1.2.0" + ["github.com/mitchellh/copystructure".fetch] + type = "git" + url = "https://github.com/mitchellh/copystructure" + rev = "d4ce1f938f7a7ea2a40bff4544b56be9c00b5e84" + sha256 = "1izw243b3r03nvgnnxvk706l3s3v3q7k69kq3n4asnzjkcymq7sm" + ["github.com/mitchellh/go-homedir"] sumVersion = "v1.1.0" ["github.com/mitchellh/go-homedir".fetch] @@ -2636,6 +2708,14 @@ rev = "8ebf2d61a8b4adcce25fc9fc9b76e8452a00672f" sha256 = "1m98wiadb6kdnzv21m8p7nk1jb30zpjh47fkb1dg251r3m7bj47v" +["github.com/mitchellh/reflectwalk"] + sumVersion = "v1.0.2" + ["github.com/mitchellh/reflectwalk".fetch] + type = "git" + url = "https://github.com/mitchellh/reflectwalk" + rev = "e0c24fdb021963cd2c4013097a0b993a7c4e344f" + sha256 = "1nxgb4gskzv045539vb312n0a443308dvh1akz7vi6x1l0z46zsm" + ["github.com/modern-go/concurrent"] sumVersion = "v0.0.0-20180306012644-bacd9c7ef1dd" ["github.com/modern-go/concurrent".fetch] @@ -2676,6 +2756,14 @@ rev = "2f068394615f73e460c2f3d2c158b0ad9321cadb" sha256 = "0ymjmy12ks7smgwmrwsa5kf07d9w5kpk1dn650azlzr61b561aw7" +["github.com/mwitkow/go-proto-validators"] + sumVersion = "v0.3.2" + ["github.com/mwitkow/go-proto-validators".fetch] + type = "git" + url = "https://github.com/mwitkow/go-proto-validators" + rev = "32a686adf8b5194d3ea07d632d49b6fb344af678" + sha256 = "0flr9964jz4bgzhjpcc54niiy6zg1skf8f8x7bcp2qvbwshxwb44" + ["github.com/mwitkow/grpc-proxy"] sumVersion = "v0.0.0-20181017164139-0f1106ef9c76" ["github.com/mwitkow/grpc-proxy".fetch] @@ -2965,13 +3053,13 @@ sha256 = "0f146yjqwx2mr110kl8scjhqd08hys7vr5z0d0a3lskb6yy22gfg" ["github.com/peggyjv/gravity-bridge/module"] - sumVersion = "v0.2.0" + sumVersion = "v0.1.22-0.20210908191543-71021d1bfff2" relPath = "module" ["github.com/peggyjv/gravity-bridge/module".fetch] type = "git" - url = "https://github.com/peggyjv/gravity-bridge" - rev = "8af32db2883af08acd35bd76703eac39ab283eaa" - sha256 = "1rk5xca5zvk3srxsfa8482hbimf1mcdl5dksf2b5vgrmim4v3vn8" + url = "https://github.com/yihuang/gravity-bridge" + rev = "71021d1bfff20c01c6c763b5d373b295c41cd247" + sha256 = "0ffyx0dfk9yhhvszhhg5ppz4hp463933v9lmqyz16s5sca7qq1dh" ["github.com/pelletier/go-toml"] sumVersion = "v1.9.3" @@ -3102,12 +3190,28 @@ sha256 = "0czzw37dq0sfq7rivxmxxw5hy287grqnng6q6hfz6mkqmhqgm1m6" ["github.com/prometheus/tsdb"] - sumVersion = "v0.10.0" + sumVersion = "v0.7.1" ["github.com/prometheus/tsdb".fetch] type = "git" url = "https://github.com/prometheus/tsdb" - rev = "7762249358193da791ec62e72b080d908f96e776" - sha256 = "1wkx1nj2z9s3wxc5w4m9a319nnqr92bmflzwf7kppx0pivajy474" + rev = "c20450564cc42983bf923c13f3fda42de709ac13" + sha256 = "1c1da8i5byvhh4fp3vqjfb65aaksjskn3ggb8wg9hcfzjrhgpz04" + +["github.com/pseudomuto/protoc-gen-doc"] + sumVersion = "v1.5.0" + ["github.com/pseudomuto/protoc-gen-doc".fetch] + type = "git" + url = "https://github.com/pseudomuto/protoc-gen-doc" + rev = "27bd2775ea68088ac52ebc847c7860e4889b981d" + sha256 = "1bpb5wv76p0sjffh5d1frbygp3q1p07sdh5c8pznl5bdh5pd7zxq" + +["github.com/pseudomuto/protokit"] + sumVersion = "v0.2.0" + ["github.com/pseudomuto/protokit".fetch] + type = "git" + url = "https://github.com/pseudomuto/protokit" + rev = "c63c13958542d70af1d1ef7826d30b25cd5bf6e9" + sha256 = "14l1y989136xmbp5vigr41r594hh9h1nfx8bl5gkjrk585akrmmr" ["github.com/rakyll/statik"] sumVersion = "v0.1.7" @@ -3142,12 +3246,12 @@ sha256 = "1dyyjyrscd3d22jhh2pbn67c6nzva0v069215sjjmj313k1xzmj3" ["github.com/rjeczalik/notify"] - sumVersion = "v0.9.2" + sumVersion = "v0.9.1" ["github.com/rjeczalik/notify".fetch] type = "git" url = "https://github.com/rjeczalik/notify" - rev = "69d839f37b13a8cb7a78366f7633a4071cb43be7" - sha256 = "0pq191pvd4icp84sg0513pf5v7xm4nmldaagjd4p8ws75l656grw" + rev = "0f065fa99b48b842c3fd3e2c8b194c6f2b69f6b8" + sha256 = "15zzgyry10hvg0z2d3fm1yncbscln9mmvgsm29w67yncf6n8vcb0" ["github.com/rogpeppe/fastuuid"] sumVersion = "v1.2.0" @@ -3542,12 +3646,12 @@ sha256 = "1sgjf2vaq554ybc0cwkzn17cz2ibzph2rq0dgaw21c2hym09437x" ["github.com/tharsis/ethermint"] - sumVersion = "v0.4.2-0.20210902174739-5fac39db38ed" + sumVersion = "v0.4.2-0.20210905110306-26c5eabb1893" ["github.com/tharsis/ethermint".fetch] type = "git" url = "https://github.com/tharsis/ethermint" - rev = "5fac39db38ed302af421e56f321b979200332287" - sha256 = "1l64nimbmfxv06qn3b3356maan8npn0hlnqxd1iv4sqdganvkbra" + rev = "26c5eabb1893831385480a3740dbe22664aae7c0" + sha256 = "08zm6xc6yjzxgfqn0jqbl5mi1gpws0mlsn4w3dlywn8y2fc6qpj0" ["github.com/tidwall/gjson"] sumVersion = "v1.6.7" @@ -4026,12 +4130,12 @@ sha256 = "1wkipg7xxc0ha5p6c3bj0vpgq38l18441n5l6zxdhx0gzvz5z1hs" ["google.golang.org/genproto"] - sumVersion = "v0.0.0-20210825212027-de86158e7fda" + sumVersion = "v0.0.0-20210903162649-d08c68adba83" ["google.golang.org/genproto".fetch] type = "git" url = "https://github.com/googleapis/go-genproto" - rev = "de86158e7fdad51c5f1d1c32c67bb08b580aad80" - sha256 = "0fbxkiam9i8yqgfdsfd8bl57v0qwj7sj6r6jm99r0jc9bmq776rf" + rev = "d08c68adba83a8e9f757762b810b6a963df394c4" + sha256 = "1yj03lyr119mw4qldz8kg610k2vkdsaln3mjbjm2xjvgar1yyw1d" ["google.golang.org/grpc"] sumVersion = "v1.33.2" @@ -4267,12 +4371,12 @@ sha256 = "17li8jbw3cpn59kpcl3j3r2an4wkx3fc81xn0j4xgbjpkxh9493n" ["nhooyr.io/websocket"] - sumVersion = "v1.8.7" + sumVersion = "v1.8.6" ["nhooyr.io/websocket".fetch] type = "git" url = "https://github.com/nhooyr/websocket" - rev = "3604edcb857415cb2c1213d63328cdcd738f2328" - sha256 = "11bz96vh0nkw6f8kczzcs07ixdhjy8s7bl398j0cf1hh40zxvass" + rev = "02861b474d9c29660eff53a3c424d589aaf46d1e" + sha256 = "1xw7rhy9bvk0kzqvpcvj92l9zwwnakvqwycfxm724dw7m0d84n52" ["rsc.io/binaryregexp"] sumVersion = "v0.2.0" diff --git a/integration_tests/conftest.py b/integration_tests/conftest.py index 4c3a1bb430..9ffb4a0974 100644 --- a/integration_tests/conftest.py +++ b/integration_tests/conftest.py @@ -1,6 +1,3 @@ -import re -from pathlib import Path - import pytest from .network import setup_cronos, setup_geth @@ -11,22 +8,6 @@ def pytest_configure(config): config.addinivalue_line("markers", "gravity: gravity bridge test cases") -def pytest_addoption(parser): - parser.addoption( - "--supervisord-quiet", - dest="supervisord-quiet", - action="store_true", - default=False, - help="redirect supervisord's stdout to file", - ) - - -@pytest.fixture(scope="session") -def worker_index(worker_id): - match = re.search(r"\d+", worker_id) - return int(match[0]) if match is not None else 0 - - @pytest.fixture(scope="session") def suspend_capture(pytestconfig): """ diff --git a/integration_tests/cosmoscli.py b/integration_tests/cosmoscli.py index 645f5cb82a..d503003332 100644 --- a/integration_tests/cosmoscli.py +++ b/integration_tests/cosmoscli.py @@ -949,3 +949,15 @@ def send_to_ethereum(self, from_, receiver, coins, fee): home=self.data_dir, ) ) + + def query_contract_by_denom(self, denom: str): + "query contract by denom" + return json.loads( + self.raw( + "query", + "cronos", + "contract-by-denom", + denom, + home=self.data_dir, + ) + ) diff --git a/integration_tests/shell.nix b/integration_tests/shell.nix index bd479491b3..bd90fdff1f 100644 --- a/integration_tests/shell.nix +++ b/integration_tests/shell.nix @@ -3,7 +3,7 @@ pkgs.mkShell { buildInputs = [ pkgs.jq pkgs.go - (import ../. { inherit pkgs; }) + (import ../. { inherit pkgs; }) # cronosd pkgs.start-scripts pkgs.go-ethereum pkgs.pystarport diff --git a/integration_tests/test_gravity.py b/integration_tests/test_gravity.py index 66ca42891b..f604ef3c51 100644 --- a/integration_tests/test_gravity.py +++ b/integration_tests/test_gravity.py @@ -1,16 +1,19 @@ -import time +import json from pathlib import Path import pytest from eth_account.account import Account +from hexbytes import HexBytes from pystarport import ports from .conftest import setup_cronos, setup_geth from .network import GravityBridge from .utils import ( + ADDRS, + KEYS, add_ini_sections, - decode_bech32, deploy_contract, + send_transaction, sign_validator, supervisorctl, wait_for_fn, @@ -22,6 +25,11 @@ Account.enable_unaudited_hdwallet_features() +def cronos_crc20_abi(): + path = Path(__file__).parent.parent / "x/cronos/types/contracts/ModuleCRC20.json" + return json.load(path.open())["abi"] + + @pytest.fixture(scope="module") def geth(tmp_path_factory): "start-geth" @@ -119,6 +127,7 @@ def gravity(cronos, geth, suspend_capture): def test_gravity_transfer(gravity, suspend_capture): geth = gravity.geth cli = gravity.cronos.cosmos_cli() + cronos_w3 = gravity.cronos.w3 # deploy test erc20 contract erc20 = deploy_contract( @@ -138,31 +147,47 @@ def test_gravity_transfer(gravity, suspend_capture): geth.eth.wait_for_transaction_receipt(txhash) # gravity send - print("send to cronos") - cosmos_recipient = cli.address("community") - recipient = b"\x00" * 12 + decode_bech32(cosmos_recipient) + print("send to cronos crc20") + recipient = HexBytes(ADDRS["community"]) txhash = gravity.contract.functions.sendToCosmos( - erc20.address, recipient, amount + erc20.address, b"\x00" * 12 + recipient, amount ).transact(tx_tpl) geth.eth.wait_for_transaction_receipt(txhash) assert erc20.caller.balanceOf(geth.eth.coinbase) == balance - amount denom = "gravity" + erc20.address + crc20_contract = None + def check(): - return cli.balance(cosmos_recipient, denom) == amount + nonlocal crc20_contract + try: + rsp = cli.query_contract_by_denom(denom) + except AssertionError: + # not deployed yet + return False + assert len(rsp["auto_contract"]) > 0 + crc20_contract = cronos_w3.eth.contract( + address=rsp["auto_contract"], abi=cronos_crc20_abi() + ) + return crc20_contract.caller.balanceOf(recipient) == amount wait_for_fn("send-to-cronos", check) # send it back to erc20 - print("send back to ethereum") - rsp = cli.send_to_ethereum( - cosmos_recipient, geth.eth.coinbase, f"{amount}{denom}", f"0{denom}" + tx = crc20_contract.functions.send_to_ethereum( + geth.eth.coinbase, amount, 0 + ).buildTransaction( + { + "gas": 42000, + "nonce": cronos_w3.eth.get_transaction_count(recipient), + } ) - assert rsp["code"] == 0, rsp["raw_log"] - assert cli.balance(cosmos_recipient, denom) == 0 + txreceipt = send_transaction(cronos_w3, tx, KEYS["community"]) + assert txreceipt.status == 1, "should success" def check(): - return erc20.caller.balanceOf(geth.eth.coinbase) == balance + v = erc20.caller.balanceOf(geth.eth.coinbase) + return v == balance wait_for_fn("send-to-ethereum", check) diff --git a/integration_tests/utils.py b/integration_tests/utils.py index 826a5620b0..bf0a81c5b7 100644 --- a/integration_tests/utils.py +++ b/integration_tests/utils.py @@ -31,7 +31,9 @@ def wait_for_fn(name, fn, *, timeout=120, interval=1): for i in range(int(timeout / interval)): - if fn(): + result = fn() + print("check", name, result) + if result: break time.sleep(interval) else: @@ -313,3 +315,10 @@ def deploy_contract(w3, jsonfile, args=()): txhash = contract.constructor(*args).transact({"from": w3.eth.coinbase}) address = w3.eth.wait_for_transaction_receipt(txhash).contractAddress return w3.eth.contract(address=address, abi=info["abi"]) + + +def send_transaction(w3, tx, key): + acct = eth_account.Account.from_key(key) + signed = acct.sign_transaction(tx) + txhash = w3.eth.send_raw_transaction(signed.rawTransaction) + return w3.eth.wait_for_transaction_receipt(txhash) diff --git a/nix/scripts.nix b/nix/scripts.nix index 6c57bcf613..a024e1bfde 100644 --- a/nix/scripts.nix +++ b/nix/scripts.nix @@ -1,10 +1,10 @@ { pkgs , config -, cronos ? (import ../. { inherit pkgs; }) }: rec { start-cronos = pkgs.writeShellScriptBin "start-cronos" '' - export PATH=${pkgs.pystarport}/bin:${cronos}/bin:$PATH + # rely on environment to provide cronosd + export PATH=${pkgs.pystarport}/bin:$PATH ${../scripts/start-cronos} ${config.cronos-config} $@ ''; start-geth = pkgs.writeShellScriptBin "start-geth" '' diff --git a/proto/cronos/query.proto b/proto/cronos/query.proto index 4bbda9cf76..21682ceb7b 100644 --- a/proto/cronos/query.proto +++ b/proto/cronos/query.proto @@ -9,7 +9,38 @@ option go_package = "github.com/crypto-org-chain/cronos/x/cronos/types"; // Query defines the gRPC querier service. service Query { + // ContractByDenom queries contract addresses by native denom + rpc ContractByDenom(ContractByDenomRequest) returns (ContractByDenomResponse) { + option (google.api.http).get = "/cronos/v1/contract_by_denom/{denom}"; + } + + // DenomByContract queries native denom by contract address + rpc DenomByContract(DenomByContractRequest) returns (DenomByContractResponse) { + option (google.api.http).get = "/cronos/v1/denom_by_contract/{contract}"; + } + // this line is used by starport scaffolding # 2 } +// ContractByDenomRequest is the request type of ContractByDenom call +message ContractByDenomRequest { + string denom = 1; +} + +// ContractByDenomRequest is the response type of ContractByDenom call +message ContractByDenomResponse { + string contract = 1; + string auto_contract = 2; +} + +// DenomByContractRequest is the request type of DenomByContract call +message DenomByContractRequest { + string contract = 1; +} + +// DenomByContractResponse is the response type of DenomByContract call +message DenomByContractResponse { + string denom = 1; +} + // this line is used by starport scaffolding # 3 diff --git a/x/cronos/client/cli/query.go b/x/cronos/client/cli/query.go index 645c0f1640..32ad91d347 100644 --- a/x/cronos/client/cli/query.go +++ b/x/cronos/client/cli/query.go @@ -2,13 +2,12 @@ package cli import ( "fmt" - // "strings" "github.com/spf13/cobra" + rpctypes "github.com/tharsis/ethermint/ethereum/rpc/types" "github.com/cosmos/cosmos-sdk/client" - // "github.com/cosmos/cosmos-sdk/client/flags" - // sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/crypto-org-chain/cronos/x/cronos/types" ) @@ -24,7 +23,74 @@ func GetQueryCmd(queryRoute string) *cobra.Command { RunE: client.ValidateCmd, } + cmd.AddCommand( + GetContractByDenomCmd(), + GetDenomByContractCmd(), + ) + // this line is used by starport scaffolding # 1 return cmd } + +// GetContractByDenomCmd queries the contracts by denom +func GetContractByDenomCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "contract-by-denom [denom]", + Short: "Gets contract addresses connected with the coin denom", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + req := &types.ContractByDenomRequest{ + Denom: args[0], + } + + res, err := queryClient.ContractByDenom(rpctypes.ContextWithHeight(clientCtx.Height), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + return cmd +} + +// GetDenomByContractCmd queries the denom name by contract address +func GetDenomByContractCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "denom-by-contract [contract]", + Short: "Gets the denom of the coin connected with the contract", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + req := &types.DenomByContractRequest{ + Contract: args[0], + } + + res, err := queryClient.DenomByContract(rpctypes.ContextWithHeight(clientCtx.Height), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + return cmd +} diff --git a/x/cronos/keeper/evm_log_handlers.go b/x/cronos/keeper/evm_log_handlers.go index 80caa6411a..3a4b715f9c 100644 --- a/x/cronos/keeper/evm_log_handlers.go +++ b/x/cronos/keeper/evm_log_handlers.go @@ -141,12 +141,12 @@ func (h EthereumTransferHandler) Handle(ctx sdk.Context, contract common.Address } contractAddr := sdk.AccAddress(contract.Bytes()) - recipient := sdk.AccAddress(unpacked[0].(common.Address).Bytes()) + ethRecipient := unpacked[0].(common.Address) amount := sdk.NewIntFromBigInt(unpacked[1].(*big.Int)) bridgeFee := sdk.NewIntFromBigInt(unpacked[2].(*big.Int)) msg := gravitytypes.MsgSendToEthereum{ Sender: contractAddr.String(), - EthereumRecipient: recipient.String(), + EthereumRecipient: ethRecipient.Hex(), Amount: sdk.NewCoin(denom, amount), BridgeFee: sdk.NewCoin(denom, bridgeFee), } diff --git a/x/cronos/keeper/grpc_query.go b/x/cronos/keeper/grpc_query.go index 7c2e6b44e0..0a07c5364c 100644 --- a/x/cronos/keeper/grpc_query.go +++ b/x/cronos/keeper/grpc_query.go @@ -1,7 +1,42 @@ package keeper import ( + "context" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/crypto-org-chain/cronos/x/cronos/types" + "github.com/ethereum/go-ethereum/common" ) var _ types.QueryServer = Keeper{} + +// ContractByDenom query contract by denom, returns both external contract and auto deployed contract +func (k Keeper) ContractByDenom(goCtx context.Context, req *types.ContractByDenomRequest) (*types.ContractByDenomResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + rsp := types.ContractByDenomResponse{} + contract, found := k.getExternalContractByDenom(ctx, req.Denom) + if found { + rsp.Contract = contract.String() + } + autoContract, found := k.getAutoContractByDenom(ctx, req.Denom) + if found { + rsp.AutoContract = autoContract.String() + } + if len(rsp.Contract) == 0 && len(rsp.AutoContract) == 0 { + return nil, fmt.Errorf("contract for the coin denom %s is not found", req.Denom) + } + return &rsp, nil +} + +// DenomByContract query denom by contract +func (k Keeper) DenomByContract(goCtx context.Context, req *types.DenomByContractRequest) (*types.DenomByContractResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + denom, found := k.GetDenomByContract(ctx, common.HexToAddress(req.Contract)) + if !found { + return nil, fmt.Errorf("coin denom for contract %s is not found", req.Contract) + } + return &types.DenomByContractResponse{ + Denom: denom, + }, nil +} diff --git a/x/cronos/keeper/hooks.go b/x/cronos/keeper/hooks.go index 3c6c02fc25..09074b6c22 100644 --- a/x/cronos/keeper/hooks.go +++ b/x/cronos/keeper/hooks.go @@ -2,6 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ethereum/go-ethereum/common" gravitytypes "github.com/peggyjv/gravity-bridge/module/x/gravity/types" ) @@ -16,4 +17,33 @@ func (k Keeper) AfterSignerSetExecutedEvent(ctx sdk.Context, event gravitytypes. func (k Keeper) AfterBatchExecutedEvent(ctx sdk.Context, event gravitytypes.BatchExecutedEvent) {} -func (k Keeper) AfterSendToCosmosEvent(ctx sdk.Context, event gravitytypes.SendToCosmosEvent) {} +func (k Keeper) AfterSendToCosmosEvent(ctx sdk.Context, event gravitytypes.SendToCosmosEvent) { + cacheCtx, commit := ctx.CacheContext() + err := k.doAfterSendToCosmosEvent(cacheCtx, event) + if err == nil { + commit() + } else { + k.Logger(ctx).Error("AfterSendToCosmosEvent hook failed", "error", err) + } +} + +func (k Keeper) doAfterSendToCosmosEvent(ctx sdk.Context, event gravitytypes.SendToCosmosEvent) error { + isCosmosOriginated, denom := k.gravityKeeper.ERC20ToDenomLookup(ctx, event.TokenContract) + if isCosmosOriginated { + // ignore cosmos originated transfer + return nil + } + // Try to convert the newly minted native tokens to erc20 contract + cosmosAddr, err := sdk.AccAddressFromBech32(event.CosmosReceiver) + if err != nil { + return err + } + addr := common.BytesToAddress(cosmosAddr.Bytes()) + // Use auto deploy here for testing. + // FIXME update after gov feature is implemented: https://github.com/crypto-org-chain/cronos/issues/46 + err = k.ConvertCoinFromNativeToCRC20(ctx, addr, sdk.NewCoin(denom, event.Amount), true) + if err != nil { + return err + } + return nil +} diff --git a/x/cronos/keeper/ibc_hooks_test.go b/x/cronos/keeper/ibc_hooks_test.go index cf470993bd..3788e7a17e 100644 --- a/x/cronos/keeper/ibc_hooks_test.go +++ b/x/cronos/keeper/ibc_hooks_test.go @@ -75,6 +75,7 @@ func (suite *KeeperTestSuite) TestOnRecvTransfer() { suite.app.GetSubspace(types.ModuleName), suite.app.BankKeeper, keepertest.IbcKeeperMock{}, + suite.app.GravityKeeper, suite.app.EvmKeeper, ) suite.app.CronosKeeper = cronosKeeper diff --git a/x/cronos/keeper/ibc_test.go b/x/cronos/keeper/ibc_test.go index ee6950856e..0cde6c7892 100644 --- a/x/cronos/keeper/ibc_test.go +++ b/x/cronos/keeper/ibc_test.go @@ -3,6 +3,9 @@ package keeper_test import ( "errors" "fmt" + + "math/big" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/crypto-org-chain/cronos/app" cronosmodulekeeper "github.com/crypto-org-chain/cronos/x/cronos/keeper" @@ -10,7 +13,6 @@ import ( "github.com/crypto-org-chain/cronos/x/cronos/types" "github.com/ethereum/go-ethereum/common" "github.com/tharsis/ethermint/crypto/ethsecp256k1" - "math/big" ) const CorrectIbcDenom = "ibc/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" @@ -260,6 +262,7 @@ func (suite *KeeperTestSuite) TestIbcTransferCoins() { suite.app.GetSubspace(types.ModuleName), suite.app.BankKeeper, keepertest.IbcKeeperMock{}, + suite.app.GravityKeeper, suite.app.EvmKeeper, ) suite.app.CronosKeeper = cronosKeeper diff --git a/x/cronos/keeper/keeper.go b/x/cronos/keeper/keeper.go index 1cc5f850de..aab59203e1 100644 --- a/x/cronos/keeper/keeper.go +++ b/x/cronos/keeper/keeper.go @@ -27,6 +27,8 @@ type ( bankKeeper types.BankKeeper // ibc transfer operations transferKeeper types.TransferKeeper + // gravity bridge keeper + gravityKeeper types.GravityKeeper // ethermint evm keeper evmKeeper *evmkeeper.Keeper @@ -41,6 +43,7 @@ func NewKeeper( paramSpace paramtypes.Subspace, bankKeeper types.BankKeeper, transferKeeper types.TransferKeeper, + gravityKeeper types.GravityKeeper, evmKeeper *evmkeeper.Keeper, // this line is used by starport scaffolding # ibc/keeper/parameter ) *Keeper { @@ -57,6 +60,7 @@ func NewKeeper( paramSpace: paramSpace, bankKeeper: bankKeeper, transferKeeper: transferKeeper, + gravityKeeper: gravityKeeper, evmKeeper: evmKeeper, // this line is used by starport scaffolding # ibc/keeper/return } diff --git a/x/cronos/keeper/params_test.go b/x/cronos/keeper/params_test.go index 69d27d63cc..39edd470e5 100644 --- a/x/cronos/keeper/params_test.go +++ b/x/cronos/keeper/params_test.go @@ -2,6 +2,7 @@ package keeper_test import ( "errors" + "github.com/crypto-org-chain/cronos/app" cronosmodulekeeper "github.com/crypto-org-chain/cronos/x/cronos/keeper" keepertest "github.com/crypto-org-chain/cronos/x/cronos/keeper/mock" @@ -43,6 +44,7 @@ func (suite *KeeperTestSuite) TestGetSourceChannelID() { suite.app.GetSubspace(types.ModuleName), suite.app.BankKeeper, keepertest.IbcKeeperMock{}, + suite.app.GravityKeeper, suite.app.EvmKeeper, ) suite.app.CronosKeeper = cronosKeeper diff --git a/x/cronos/types/contracts/ModuleCRC20.json b/x/cronos/types/contracts/ModuleCRC20.json index dca2b0b980..fed1b66d76 100644 --- a/x/cronos/types/contracts/ModuleCRC20.json +++ b/x/cronos/types/contracts/ModuleCRC20.json @@ -644,5 +644,5 @@ "type": "function" } ], - "bin": "60806040526012600660006101000a81548160ff021916908360ff160217905550604051806020016040528060008152506007908051906020019062000047929190620002c2565b503480156200005557600080fd5b5060405162002caf38038062002caf833981810160405260408110156200007b57600080fd5b81019080805160405193929190846401000000008211156200009c57600080fd5b83820191506020820185811115620000b357600080fd5b8251866001820283011164010000000082111715620000d157600080fd5b8083526020830192505050908051906020019080838360005b8381101562000107578082015181840152602081019050620000ea565b50505050905090810190601f168015620001355780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620001e35780601f10620001b757610100808354040283529160200191620001e3565b820191906000526020600020905b815481529060010190602001808311620001c557829003601f168201915b505050505033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a2806005908051906020019062000284929190620002c2565b505080600660006101000a81548160ff021916908360ff1602179055508160089080519060200190620002b9929190620002c2565b50505062000371565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b6200036e91905b808211156200036a57600081600090555060010162000350565b5090565b90565b61292e80620003816000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806395d89b4111610104578063bf7e214f116100a2578063dd62ed3e11610071578063dd62ed3e14610989578063e978206414610a01578063ee36665414610a4f578063f2d5d56b14610ad2576101cf565b8063bf7e214f146107d0578063c47f00271461081a578063d3d78b9b146108d5578063daea85c51461092d576101cf565b8063a9059cbb116100de578063a9059cbb146106a4578063b753a98c1461070a578063bb35783b14610758578063be9a6555146107c6576101cf565b806395d89b41146105a55780639dc29fac14610628578063a0712d6814610676576101cf565b806340c10f191161017157806375620d6f1161014b57806375620d6f146104a757806375f12b21146104f55780637a9e5e4b146105175780638da5cb5b1461055b576101cf565b806340c10f19146103d357806342966c681461042157806370a082311461044f576101cf565b806313af4035116101ad57806313af4035146102c757806318160ddd1461030b57806323b872dd14610329578063313ce567146103af576101cf565b806306fdde03146101d457806307da68f514610257578063095ea7b314610261575b600080fd5b6101dc610b20565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025f610bbe565b005b6102ad6004803603604081101561027757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ca6565b604051808215151515815260200191505060405180910390f35b610309600480360360208110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e1b565b005b610313610f64565b6040518082815260200191505060405180910390f35b6103956004803603606081101561033f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6a565b604051808215151515815260200191505060405180910390f35b6103b7611502565b604051808260ff1660ff16815260200191505060405180910390f35b61041f600480360360408110156103e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611515565b005b61044d6004803603602081101561043757600080fd5b8101908080359060200190929190505050611728565b005b6104916004803603602081101561046557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611735565b6040518082815260200191505060405180910390f35b6104f3600480360360408110156104bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061174d565b005b6104fd61193e565b604051808215151515815260200191505060405180910390f35b6105596004803603602081101561052d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611951565b005b610563611a98565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ad611abe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105ed5780820151818401526020810190506105d2565b50505050905090810190601f16801561061a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106746004803603604081101561063e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b5c565b005b6106a26004803603602081101561068c57600080fd5b81019080803590602001909291905050506120fa565b005b6106f0600480360360408110156106ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612107565b604051808215151515815260200191505060405180910390f35b6107566004803603604081101561072057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061211c565b005b6107c46004803603606081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061212c565b005b6107ce61213d565b005b6107d8612226565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108d36004803603602081101561083057600080fd5b810190808035906020019064010000000081111561084d57600080fd5b82018360208201111561085f57600080fd5b8035906020019184600183028401116401000000008311171561088157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061224b565b005b61092b600480360360608110156108eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612305565b005b61096f6004803603602081101561094357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612390565b604051808215151515815260200191505060405180910390f35b6109eb6004803603604081101561099f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c3565b6040518082815260200191505060405180910390f35b610a4d60048036036040811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123e8565b005b610a57612442565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a97578082015181840152602081019050610a7c565b50505050905090810190601f168015610ac45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b1e60048036036040811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124e4565b005b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bb65780601f10610b8b57610100808354040283529160200191610bb6565b820191906000526020600020905b815481529060010190602001808311610b9957829003601f168201915b505050505081565b610bec336000357fffffffff00000000000000000000000000000000000000000000000000000000166124f4565b610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60018060146101000a81548160ff0219169083151502179055507fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b60405160405180910390a1565b6000600160149054906101000a900460ff1615610d2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b610e49336000357fffffffff00000000000000000000000000000000000000000000000000000000166124f4565b610ebb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60025481565b6000600160149054906101000a900460ff1615610fef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156110c757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156112c55781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156111be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b611244600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361274d565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b6113c3600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361274d565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061144f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836127d0565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900460ff1681565b611543336000357fffffffff00000000000000000000000000000000000000000000000000000000166124f4565b6115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611638576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611681600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826127d0565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116d0600254826127d0565b6002819055508173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a25050565b6117323382611b5c565b50565b60036020528060005260406000206000915090505481565b7389a7ef2f08b1c018d5cc88836249b84dd539290573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179957600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b611897600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261274d565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118e66002548261274d565b6002819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b600160149054906101000a900460ff1681565b61197f336000357fffffffff00000000000000000000000000000000000000000000000000000000166124f4565b6119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b545780601f10611b2957610100808354040283529160200191611b54565b820191906000526020600020905b815481529060010190602001808311611b3757829003601f168201915b505050505081565b611b8a336000357fffffffff00000000000000000000000000000000000000000000000000000000166124f4565b611bfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611c7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611d5757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611f555780600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b611ed4600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261274d565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561200a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b612053600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261274d565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120a26002548261274d565b6002819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b6121043382611515565b50565b6000612114338484610f6a565b905092915050565b612127338383610f6a565b505050565b612137838383610f6a565b50505050565b61216b336000357fffffffff00000000000000000000000000000000000000000000000000000000166124f4565b6121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff0219169083151502179055507f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b60405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612279336000357fffffffff00000000000000000000000000000000000000000000000000000000166124f4565b6122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060079080519060200190612301929190612853565b5050565b6123183361231384846127d0565b611b5c565b7f937492d2511a2fbc9b51ea08825f1e252247d339dfd50904ebf4f4411f1d8136838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b60006123bc827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ca6565b9050919050565b6004602052816000526040600020602052806000526040600020600091509150505481565b7389a7ef2f08b1c018d5cc88836249b84dd539290573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461243457600080fd5b61243e8282611515565b5050565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124da5780601f106124af576101008083540402835291602001916124da565b820191906000526020600020905b8154815290600101906020018083116124bd57829003601f168201915b5050505050905090565b6124ef823383610f6a565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125335760019050612747565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125925760019050612747565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f15760009050612747565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561270957600080fd5b505afa15801561271d573d6000803e3d6000fd5b505050506040513d602081101561273357600080fd5b810190808051906020019092919050505090505b92915050565b60008282840391508111156127ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b600082828401915081101561284d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061289457805160ff19168380011785556128c2565b828001600101855582156128c2579182015b828111156128c15782518255916020019190600101906128a6565b5b5090506128cf91906128d3565b5090565b6128f591905b808211156128f15760008160009055506001016128d9565b5090565b9056fea26469706673582212206a90ae570df4e2902db45db37823542ae8a92ec6b2a15b5e3fc56ced01d99b7064736f6c634300060b0033" + "bin": "60806040526012600660006101000a81548160ff021916908360ff160217905550604051806020016040528060008152506007908051906020019062000047929190620002c2565b503480156200005557600080fd5b5060405162002cbd38038062002cbd833981810160405260408110156200007b57600080fd5b81019080805160405193929190846401000000008211156200009c57600080fd5b83820191506020820185811115620000b357600080fd5b8251866001820283011164010000000082111715620000d157600080fd5b8083526020830192505050908051906020019080838360005b8381101562000107578082015181840152602081019050620000ea565b50505050905090810190601f168015620001355780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620001e35780601f10620001b757610100808354040283529160200191620001e3565b820191906000526020600020905b815481529060010190602001808311620001c557829003601f168201915b505050505033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a2806005908051906020019062000284929190620002c2565b505080600660006101000a81548160ff021916908360ff1602179055508160089080519060200190620002b9929190620002c2565b50505062000371565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b6200036e91905b808211156200036a57600081600090555060010162000350565b5090565b90565b61293c80620003816000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806395d89b4111610104578063bf7e214f116100a2578063dd62ed3e11610071578063dd62ed3e14610989578063e978206414610a01578063ee36665414610a4f578063f2d5d56b14610ad2576101cf565b8063bf7e214f146107d0578063c47f00271461081a578063d3d78b9b146108d5578063daea85c51461092d576101cf565b8063a9059cbb116100de578063a9059cbb146106a4578063b753a98c1461070a578063bb35783b14610758578063be9a6555146107c6576101cf565b806395d89b41146105a55780639dc29fac14610628578063a0712d6814610676576101cf565b806340c10f191161017157806375620d6f1161014b57806375620d6f146104a757806375f12b21146104f55780637a9e5e4b146105175780638da5cb5b1461055b576101cf565b806340c10f19146103d357806342966c681461042157806370a082311461044f576101cf565b806313af4035116101ad57806313af4035146102c757806318160ddd1461030b57806323b872dd14610329578063313ce567146103af576101cf565b806306fdde03146101d457806307da68f514610257578063095ea7b314610261575b600080fd5b6101dc610b20565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025f610bbe565b005b6102ad6004803603604081101561027757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ca6565b604051808215151515815260200191505060405180910390f35b610309600480360360208110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e1b565b005b610313610f64565b6040518082815260200191505060405180910390f35b6103956004803603606081101561033f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6a565b604051808215151515815260200191505060405180910390f35b6103b7611502565b604051808260ff1660ff16815260200191505060405180910390f35b61041f600480360360408110156103e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611515565b005b61044d6004803603602081101561043757600080fd5b8101908080359060200190929190505050611728565b005b6104916004803603602081101561046557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611735565b6040518082815260200191505060405180910390f35b6104f3600480360360408110156104bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061174d565b005b6104fd6117a7565b604051808215151515815260200191505060405180910390f35b6105596004803603602081101561052d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117ba565b005b610563611901565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ad611927565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105ed5780820151818401526020810190506105d2565b50505050905090810190601f16801561061a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106746004803603604081101561063e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119c5565b005b6106a26004803603602081101561068c57600080fd5b8101908080359060200190929190505050611f63565b005b6106f0600480360360408110156106ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f70565b604051808215151515815260200191505060405180910390f35b6107566004803603604081101561072057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f85565b005b6107c46004803603606081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f95565b005b6107ce611fa6565b005b6107d861208f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108d36004803603602081101561083057600080fd5b810190808035906020019064010000000081111561084d57600080fd5b82018360208201111561085f57600080fd5b8035906020019184600183028401116401000000008311171561088157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120b4565b005b61092b600480360360608110156108eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061216e565b005b61096f6004803603602081101561094357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121f9565b604051808215151515815260200191505060405180910390f35b6109eb6004803603604081101561099f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061222c565b6040518082815260200191505060405180910390f35b610a4d60048036036040811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612251565b005b610a576122ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a97578082015181840152602081019050610a7c565b50505050905090810190601f168015610ac45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b1e60048036036040811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061234d565b005b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bb65780601f10610b8b57610100808354040283529160200191610bb6565b820191906000526020600020905b815481529060010190602001808311610b9957829003601f168201915b505050505081565b610bec336000357fffffffff000000000000000000000000000000000000000000000000000000001661235d565b610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60018060146101000a81548160ff0219169083151502179055507fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b60405160405180910390a1565b6000600160149054906101000a900460ff1615610d2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b610e49336000357fffffffff000000000000000000000000000000000000000000000000000000001661235d565b610ebb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60025481565b6000600160149054906101000a900460ff1615610fef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156110c757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156112c55781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156111be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b611244600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836125b6565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b6113c3600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836125b6565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061144f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612639565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900460ff1681565b611543336000357fffffffff000000000000000000000000000000000000000000000000000000001661235d565b6115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611638576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611681600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612639565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116d060025482612639565b6002819055508173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a25050565b61173233826119c5565b50565b60036020528060005260406000206000915090505481565b7389a7ef2f08b1c018d5cc88836249b84dd539290573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179957600080fd5b6117a382826126bc565b5050565b600160149054906101000a900460ff1681565b6117e8336000357fffffffff000000000000000000000000000000000000000000000000000000001661235d565b61185a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119bd5780601f10611992576101008083540402835291602001916119bd565b820191906000526020600020905b8154815290600101906020018083116119a057829003601f168201915b505050505081565b6119f3336000357fffffffff000000000000000000000000000000000000000000000000000000001661235d565b611a65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611bc057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611dbe5780600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b611d3d600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826125b6565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b611ebc600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826125b6565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f0b600254826125b6565b6002819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b611f6d3382611515565b50565b6000611f7d338484610f6a565b905092915050565b611f90338383610f6a565b505050565b611fa0838383610f6a565b50505050565b611fd4336000357fffffffff000000000000000000000000000000000000000000000000000000001661235d565b612046576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff0219169083151502179055507f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b60405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120e2336000357fffffffff000000000000000000000000000000000000000000000000000000001661235d565b612154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b806007908051906020019061216a929190612861565b5050565b6121813361217c8484612639565b6126bc565b7f937492d2511a2fbc9b51ea08825f1e252247d339dfd50904ebf4f4411f1d8136838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b6000612225827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ca6565b9050919050565b6004602052816000526040600020602052806000526040600020600091509150505481565b7389a7ef2f08b1c018d5cc88836249b84dd539290573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461229d57600080fd5b6122a78282611515565b5050565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123435780601f1061231857610100808354040283529160200191612343565b820191906000526020600020905b81548152906001019060200180831161232657829003601f168201915b5050505050905090565b612358823383610f6a565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561239c57600190506125b0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123fb57600190506125b0565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561245a57600090506125b0565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561257257600080fd5b505afa158015612586573d6000803e3d6000fd5b505050506040513d602081101561259c57600080fd5b810190808051906020019092919050505090505b92915050565b6000828284039150811115612633576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b6127ba600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826125b6565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612809600254826125b6565b6002819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a257805160ff19168380011785556128d0565b828001600101855582156128d0579182015b828111156128cf5782518255916020019190600101906128b4565b5b5090506128dd91906128e1565b5090565b61290391905b808211156128ff5760008160009055506001016128e7565b5090565b9056fea2646970667358221220432cecb8345f717687ae76f11302ca5c283f1ecd78f469d92c001e2e2286ce5064736f6c634300060b0033" } diff --git a/x/cronos/types/interfaces.go b/x/cronos/types/interfaces.go index 93716669c9..50e3e00a9b 100644 --- a/x/cronos/types/interfaces.go +++ b/x/cronos/types/interfaces.go @@ -39,6 +39,11 @@ type AccountKeeper interface { GetModuleAccount(ctx sdk.Context, moduleName string) authtypes.ModuleAccountI } +// GravityKeeper defines the expected gravity keeper interface +type GravityKeeper interface { + ERC20ToDenomLookup(ctx sdk.Context, tokenContract string) (bool, string) +} + // EvmLogHandler defines the interface for evm log handler type EvmLogHandler interface { // Return the id of the log signature it handles diff --git a/x/cronos/types/query.pb.go b/x/cronos/types/query.pb.go index 366c63966a..df7d7aab1d 100644 --- a/x/cronos/types/query.pb.go +++ b/x/cronos/types/query.pb.go @@ -11,7 +11,11 @@ import ( proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. @@ -25,22 +29,229 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// ContractByDenomRequest is the request type of ContractByDenom call +type ContractByDenomRequest struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *ContractByDenomRequest) Reset() { *m = ContractByDenomRequest{} } +func (m *ContractByDenomRequest) String() string { return proto.CompactTextString(m) } +func (*ContractByDenomRequest) ProtoMessage() {} +func (*ContractByDenomRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d4ed0fd688c48372, []int{0} +} +func (m *ContractByDenomRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContractByDenomRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ContractByDenomRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ContractByDenomRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContractByDenomRequest.Merge(m, src) +} +func (m *ContractByDenomRequest) XXX_Size() int { + return m.Size() +} +func (m *ContractByDenomRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ContractByDenomRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ContractByDenomRequest proto.InternalMessageInfo + +func (m *ContractByDenomRequest) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// ContractByDenomRequest is the response type of ContractByDenom call +type ContractByDenomResponse struct { + Contract string `protobuf:"bytes,1,opt,name=contract,proto3" json:"contract,omitempty"` + AutoContract string `protobuf:"bytes,2,opt,name=auto_contract,json=autoContract,proto3" json:"auto_contract,omitempty"` +} + +func (m *ContractByDenomResponse) Reset() { *m = ContractByDenomResponse{} } +func (m *ContractByDenomResponse) String() string { return proto.CompactTextString(m) } +func (*ContractByDenomResponse) ProtoMessage() {} +func (*ContractByDenomResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d4ed0fd688c48372, []int{1} +} +func (m *ContractByDenomResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContractByDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ContractByDenomResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ContractByDenomResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContractByDenomResponse.Merge(m, src) +} +func (m *ContractByDenomResponse) XXX_Size() int { + return m.Size() +} +func (m *ContractByDenomResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ContractByDenomResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ContractByDenomResponse proto.InternalMessageInfo + +func (m *ContractByDenomResponse) GetContract() string { + if m != nil { + return m.Contract + } + return "" +} + +func (m *ContractByDenomResponse) GetAutoContract() string { + if m != nil { + return m.AutoContract + } + return "" +} + +// DenomByContractRequest is the request type of DenomByContract call +type DenomByContractRequest struct { + Contract string `protobuf:"bytes,1,opt,name=contract,proto3" json:"contract,omitempty"` +} + +func (m *DenomByContractRequest) Reset() { *m = DenomByContractRequest{} } +func (m *DenomByContractRequest) String() string { return proto.CompactTextString(m) } +func (*DenomByContractRequest) ProtoMessage() {} +func (*DenomByContractRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d4ed0fd688c48372, []int{2} +} +func (m *DenomByContractRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DenomByContractRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DenomByContractRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DenomByContractRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DenomByContractRequest.Merge(m, src) +} +func (m *DenomByContractRequest) XXX_Size() int { + return m.Size() +} +func (m *DenomByContractRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DenomByContractRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DenomByContractRequest proto.InternalMessageInfo + +func (m *DenomByContractRequest) GetContract() string { + if m != nil { + return m.Contract + } + return "" +} + +// DenomByContractResponse is the response type of DenomByContract call +type DenomByContractResponse struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *DenomByContractResponse) Reset() { *m = DenomByContractResponse{} } +func (m *DenomByContractResponse) String() string { return proto.CompactTextString(m) } +func (*DenomByContractResponse) ProtoMessage() {} +func (*DenomByContractResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d4ed0fd688c48372, []int{3} +} +func (m *DenomByContractResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DenomByContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DenomByContractResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DenomByContractResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DenomByContractResponse.Merge(m, src) +} +func (m *DenomByContractResponse) XXX_Size() int { + return m.Size() +} +func (m *DenomByContractResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DenomByContractResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DenomByContractResponse proto.InternalMessageInfo + +func (m *DenomByContractResponse) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func init() { + proto.RegisterType((*ContractByDenomRequest)(nil), "cronos.ContractByDenomRequest") + proto.RegisterType((*ContractByDenomResponse)(nil), "cronos.ContractByDenomResponse") + proto.RegisterType((*DenomByContractRequest)(nil), "cronos.DenomByContractRequest") + proto.RegisterType((*DenomByContractResponse)(nil), "cronos.DenomByContractResponse") +} + func init() { proto.RegisterFile("cronos/query.proto", fileDescriptor_d4ed0fd688c48372) } var fileDescriptor_d4ed0fd688c48372 = []byte{ - // 183 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0xce, 0x31, 0x0e, 0x82, 0x30, - 0x14, 0x06, 0x60, 0x18, 0xc4, 0x84, 0x91, 0x91, 0x98, 0x1e, 0xc0, 0x04, 0x5e, 0xd0, 0x1b, 0xb8, - 0x3a, 0xb9, 0xba, 0xb5, 0x4d, 0x53, 0x9a, 0x48, 0x5f, 0x6d, 0x1f, 0x46, 0x6e, 0xe1, 0xb1, 0x1c, - 0x19, 0x1d, 0x0d, 0x5c, 0xc4, 0x48, 0x75, 0x7b, 0x79, 0xf9, 0xfe, 0x3f, 0x7f, 0x5e, 0x48, 0x8f, - 0x16, 0x03, 0x5c, 0x7b, 0xe5, 0x87, 0xda, 0x79, 0x24, 0x2c, 0xb2, 0xf8, 0x2b, 0x37, 0x1a, 0x51, - 0x5f, 0x14, 0x70, 0x67, 0x80, 0x5b, 0x8b, 0xc4, 0xc9, 0xa0, 0x0d, 0x51, 0x95, 0x5b, 0x89, 0xa1, - 0xc3, 0x00, 0x82, 0x07, 0x15, 0xe3, 0x70, 0x6b, 0x84, 0x22, 0xde, 0x80, 0xe3, 0xda, 0xd8, 0x05, - 0x47, 0xbb, 0x5b, 0xe7, 0xab, 0xd3, 0x57, 0x1c, 0x8e, 0xcf, 0x89, 0xa5, 0xe3, 0xc4, 0xd2, 0xf7, - 0xc4, 0xd2, 0xc7, 0xcc, 0x92, 0x71, 0x66, 0xc9, 0x6b, 0x66, 0xc9, 0xb9, 0xd1, 0x86, 0xda, 0x5e, - 0xd4, 0x12, 0x3b, 0x90, 0x7e, 0x70, 0x84, 0x15, 0x7a, 0x5d, 0xc9, 0x96, 0x1b, 0x0b, 0xbf, 0x91, - 0xf7, 0xff, 0x41, 0x83, 0x53, 0x41, 0x64, 0x4b, 0xf9, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x6e, - 0x8b, 0xc0, 0x32, 0xc4, 0x00, 0x00, 0x00, + // 379 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcd, 0x4a, 0xeb, 0x40, + 0x14, 0xc7, 0x9b, 0x42, 0xcb, 0xbd, 0xc3, 0xbd, 0x14, 0x86, 0x4b, 0x7b, 0x09, 0x12, 0x25, 0x8a, + 0x5f, 0xd8, 0x0c, 0x51, 0x9f, 0xa0, 0xba, 0x73, 0x65, 0x97, 0xdd, 0x94, 0x49, 0x1c, 0xd2, 0x80, + 0x9d, 0x93, 0x66, 0x26, 0xc5, 0x50, 0x0a, 0xa2, 0x2f, 0x50, 0xf0, 0xa5, 0x5c, 0x16, 0xdc, 0xb8, + 0x94, 0xd6, 0x07, 0x91, 0x4c, 0x32, 0xad, 0xf4, 0xc3, 0x55, 0xe6, 0x9c, 0xf9, 0x9f, 0x73, 0x7e, + 0xe7, 0x9f, 0x41, 0xd8, 0x8f, 0x81, 0x83, 0x20, 0x83, 0x84, 0xc5, 0xa9, 0x13, 0xc5, 0x20, 0x01, + 0x57, 0xf3, 0x9c, 0xb9, 0x13, 0x00, 0x04, 0xf7, 0x8c, 0xd0, 0x28, 0x24, 0x94, 0x73, 0x90, 0x54, + 0x86, 0xc0, 0x45, 0xae, 0x32, 0x4f, 0x7d, 0x10, 0x7d, 0x10, 0xc4, 0xa3, 0x82, 0xe5, 0xe5, 0x64, + 0xe8, 0x7a, 0x4c, 0x52, 0x97, 0x44, 0x34, 0x08, 0xb9, 0x12, 0xe7, 0x5a, 0xdb, 0x41, 0xf5, 0x2b, + 0xe0, 0x32, 0xa6, 0xbe, 0x6c, 0xa5, 0xd7, 0x8c, 0x43, 0xbf, 0xcd, 0x06, 0x09, 0x13, 0x12, 0xff, + 0x43, 0x95, 0xbb, 0x2c, 0xfe, 0x6f, 0xec, 0x19, 0xc7, 0xbf, 0xdb, 0x79, 0x60, 0x77, 0x50, 0x63, + 0x4d, 0x2f, 0x22, 0xe0, 0x82, 0x61, 0x13, 0xfd, 0xf2, 0x8b, 0xab, 0xa2, 0x66, 0x11, 0xe3, 0x7d, + 0xf4, 0x97, 0x26, 0x12, 0xba, 0x0b, 0x41, 0x59, 0x09, 0xfe, 0x64, 0x49, 0xdd, 0xcf, 0xbe, 0x44, + 0x75, 0xd5, 0xb1, 0x95, 0xea, 0x94, 0x66, 0xf9, 0xa1, 0xb5, 0x4d, 0x50, 0x63, 0xad, 0xaa, 0x20, + 0xda, 0xb8, 0xc2, 0xf9, 0xa4, 0x8c, 0x2a, 0xb7, 0x99, 0x2b, 0xf8, 0xd1, 0x40, 0xb5, 0x95, 0x6d, + 0xb0, 0xe5, 0xe4, 0x1e, 0x3b, 0x9b, 0x6d, 0x31, 0x77, 0xb7, 0xde, 0xe7, 0x43, 0xed, 0xb3, 0xa7, + 0xb7, 0xcf, 0x97, 0xf2, 0x21, 0x3e, 0x20, 0xc5, 0x0f, 0x1c, 0xba, 0x44, 0xc3, 0x76, 0xbd, 0xb4, + 0xab, 0x20, 0xc8, 0x48, 0x7d, 0xc6, 0xf8, 0xd9, 0x40, 0xb5, 0x15, 0xfc, 0x25, 0xc2, 0x66, 0x37, + 0x96, 0x08, 0x5b, 0xf6, 0xb6, 0x89, 0x42, 0x38, 0xc1, 0x47, 0xdf, 0x10, 0xd4, 0xbc, 0x6c, 0xbe, + 0x66, 0x21, 0x23, 0x7d, 0x1a, 0xb7, 0x6e, 0x5e, 0x67, 0x96, 0x31, 0x9d, 0x59, 0xc6, 0xc7, 0xcc, + 0x32, 0x26, 0x73, 0xab, 0x34, 0x9d, 0x5b, 0xa5, 0xf7, 0xb9, 0x55, 0xea, 0xb8, 0x41, 0x28, 0x7b, + 0x89, 0xe7, 0xf8, 0xd0, 0x27, 0x7e, 0x9c, 0x46, 0x12, 0x9a, 0x10, 0x07, 0x4d, 0xbf, 0x47, 0x43, + 0xae, 0xbb, 0x3f, 0xe8, 0x83, 0x4c, 0x23, 0x26, 0xbc, 0xaa, 0x7a, 0x59, 0x17, 0x5f, 0x01, 0x00, + 0x00, 0xff, 0xff, 0xf7, 0xcb, 0x7f, 0xa6, 0xc1, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -55,6 +266,10 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { + // ContractByDenom queries contract addresses by native denom + ContractByDenom(ctx context.Context, in *ContractByDenomRequest, opts ...grpc.CallOption) (*ContractByDenomResponse, error) + // DenomByContract queries native denom by contract address + DenomByContract(ctx context.Context, in *DenomByContractRequest, opts ...grpc.CallOption) (*DenomByContractResponse, error) } type queryClient struct { @@ -65,22 +280,741 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } +func (c *queryClient) ContractByDenom(ctx context.Context, in *ContractByDenomRequest, opts ...grpc.CallOption) (*ContractByDenomResponse, error) { + out := new(ContractByDenomResponse) + err := c.cc.Invoke(ctx, "/cronos.Query/ContractByDenom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) DenomByContract(ctx context.Context, in *DenomByContractRequest, opts ...grpc.CallOption) (*DenomByContractResponse, error) { + out := new(DenomByContractResponse) + err := c.cc.Invoke(ctx, "/cronos.Query/DenomByContract", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { + // ContractByDenom queries contract addresses by native denom + ContractByDenom(context.Context, *ContractByDenomRequest) (*ContractByDenomResponse, error) + // DenomByContract queries native denom by contract address + DenomByContract(context.Context, *DenomByContractRequest) (*DenomByContractResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } +func (*UnimplementedQueryServer) ContractByDenom(ctx context.Context, req *ContractByDenomRequest) (*ContractByDenomResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ContractByDenom not implemented") +} +func (*UnimplementedQueryServer) DenomByContract(ctx context.Context, req *DenomByContractRequest) (*DenomByContractResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DenomByContract not implemented") +} + func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } +func _Query_ContractByDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ContractByDenomRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ContractByDenom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cronos.Query/ContractByDenom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ContractByDenom(ctx, req.(*ContractByDenomRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_DenomByContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DenomByContractRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DenomByContract(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cronos.Query/DenomByContract", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DenomByContract(ctx, req.(*DenomByContractRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "cronos.Query", HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{}, - Metadata: "cronos/query.proto", + Methods: []grpc.MethodDesc{ + { + MethodName: "ContractByDenom", + Handler: _Query_ContractByDenom_Handler, + }, + { + MethodName: "DenomByContract", + Handler: _Query_DenomByContract_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cronos/query.proto", +} + +func (m *ContractByDenomRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ContractByDenomRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContractByDenomRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ContractByDenomResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ContractByDenomResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContractByDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AutoContract) > 0 { + i -= len(m.AutoContract) + copy(dAtA[i:], m.AutoContract) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AutoContract))) + i-- + dAtA[i] = 0x12 + } + if len(m.Contract) > 0 { + i -= len(m.Contract) + copy(dAtA[i:], m.Contract) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Contract))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DenomByContractRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DenomByContractRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DenomByContractRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Contract) > 0 { + i -= len(m.Contract) + copy(dAtA[i:], m.Contract) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Contract))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DenomByContractResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } + +func (m *DenomByContractResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DenomByContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ContractByDenomRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *ContractByDenomResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Contract) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.AutoContract) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *DenomByContractRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Contract) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *DenomByContractResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ContractByDenomRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContractByDenomRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContractByDenomRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContractByDenomResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContractByDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContractByDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Contract", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Contract = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AutoContract", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AutoContract = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DenomByContractRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DenomByContractRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DenomByContractRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Contract", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Contract = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DenomByContractResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DenomByContractResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DenomByContractResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/cronos/types/query.pb.gw.go b/x/cronos/types/query.pb.gw.go new file mode 100644 index 0000000000..233de3ba75 --- /dev/null +++ b/x/cronos/types/query.pb.gw.go @@ -0,0 +1,282 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: cronos/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage + +func request_Query_ContractByDenom_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ContractByDenomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := client.ContractByDenom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ContractByDenom_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ContractByDenomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := server.ContractByDenom(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_DenomByContract_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DenomByContractRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["contract"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "contract") + } + + protoReq.Contract, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "contract", err) + } + + msg, err := client.DenomByContract(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_DenomByContract_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DenomByContractRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["contract"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "contract") + } + + protoReq.Contract, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "contract", err) + } + + msg, err := server.DenomByContract(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_ContractByDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ContractByDenom_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ContractByDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DenomByContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DenomByContract_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DenomByContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_ContractByDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ContractByDenom_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ContractByDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DenomByContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_DenomByContract_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DenomByContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_ContractByDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"cronos", "v1", "contract_by_denom", "denom"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_DenomByContract_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"cronos", "v1", "denom_by_contract", "contract"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_Query_ContractByDenom_0 = runtime.ForwardResponseMessage + + forward_Query_DenomByContract_0 = runtime.ForwardResponseMessage +)