Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit b291cb9

Browse files
authored
Merge pull request #12 from smartcontractkit/TT-890-add-tests-for-revert-reasons
Fix decoding revert errors with no value and add more tests
2 parents 4ca990e + 1c14fa8 commit b291cb9

11 files changed

Lines changed: 307 additions & 37 deletions

client_main_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ type TestEnvironment struct {
3737
Client *seth.Client
3838
DebugContract *network_debug_contract.NetworkDebugContract
3939
DebugSubContract *network_sub_contract.NetworkDebugSubContract
40+
LinkTokenContract *link_token.LinkToken
4041
DebugContractAddress common.Address
4142
DebugSubContractAddress common.Address
4243
DebugContractRaw *bind.BoundContract
@@ -176,6 +177,24 @@ func TestMain(m *testing.M) {
176177
panic(err)
177178
}
178179

180+
linkTokenAbi, err := link_token.LinkTokenMetaData.GetAbi()
181+
if err != nil {
182+
panic(err)
183+
}
184+
linkDeploymentData, err := client.DeployContract(client.NewTXOpts(), "LinkToken", *linkTokenAbi, common.FromHex(link_token.LinkTokenMetaData.Bin))
185+
if err != nil {
186+
panic(err)
187+
}
188+
linkToken, err := link_token.NewLinkToken(linkDeploymentData.Address, client.Client)
189+
if err != nil {
190+
panic(err)
191+
}
192+
linkAbi, err := link_token.LinkTokenMetaData.GetAbi()
193+
if err != nil {
194+
panic(err)
195+
}
196+
client.ContractStore.AddABI("LinkToken", *linkAbi)
197+
179198
contractMap := seth.NewEmptyContractMap()
180199
for k, v := range client.ContractAddressToNameMap.GetContractMap() {
181200
contractMap.AddContract(k, v)
@@ -184,6 +203,7 @@ func TestMain(m *testing.M) {
184203
TestEnv = TestEnvironment{
185204
Client: client,
186205
DebugContract: debugContract,
206+
LinkTokenContract: linkToken,
187207
DebugContractAddress: debugContractAddress,
188208
DebugSubContractAddress: debugSubContractAddress,
189209
DebugContractRaw: debugContractRaw,

client_trace_test.go

Lines changed: 145 additions & 28 deletions
Large diffs are not rendered by default.

contracts/NetworkDebugContract.sol

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ contract NetworkDebugContract {
4141
/* Errors */
4242

4343
error CustomErr(uint256 available, uint256 required);
44+
error CustomErrNoValues();
4445

4546
/* Getters/Setters */
4647
function setMap(int256 x) public returns (int256 value) {
@@ -139,6 +140,10 @@ contract NetworkDebugContract {
139140
});
140141
}
141142

143+
function alwaysRevertsCustomErrorNoValues() public {
144+
revert CustomErrNoValues();
145+
}
146+
142147
/* Inputs/Outputs */
143148

144149
function emitNamedInputsOutputs(uint256 inputVal1, string memory inputVal2) public returns (uint256 outputVal1, string memory outputVal2) {
@@ -261,9 +266,25 @@ contract NetworkDebugContract {
261266
return x + y;
262267
}
263268

269+
function callRevertFunctionInSubContract(uint256 x, uint256 y) public {
270+
subContract.alwaysRevertsCustomError(x, y);
271+
}
272+
273+
274+
function callRevertFunctionInTheContract() public {
275+
alwaysRevertsCustomError();
276+
}
277+
264278
/* Callback function */
265279
function callbackMethod(int x) external returns (int) {
266280
emit CallbackEvent(x);
267281
return x;
268282
}
283+
284+
function onTokenTransfer(address sender, uint256 amount, bytes calldata data) external {
285+
revert CustomErr({
286+
available: 100,
287+
required: 101
288+
});
289+
}
269290
}

contracts/NetworkDebugSubContract.sol

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,12 @@ contract NetworkDebugSubContract {
5050
return x + 3;
5151
}
5252

53+
function alwaysRevertsCustomError(uint256 x, uint256 y) public {
54+
revert CustomErr({
55+
available: x,
56+
required: y
57+
});
58+
}
59+
5360
function pay() public payable {}
5461
}

contracts/abi/NetworkDebugContract.abi

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"CustomErr","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"NoIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"str","type":"string"}],"name":"NoIndexEventString","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"balance","type":"uint64"},{"internalType":"uint256","name":"dailyLimit","type":"uint256"}],"indexed":false,"internalType":"struct NetworkDebugSubContract.Account","name":"a","type":"tuple"}],"name":"NoIndexStructEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"a","type":"uint256"}],"name":"OneIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"ThreeIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"}],"name":"TwoIndexEvent","type":"event"},{"inputs":[],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"trace","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"traceOneInt","outputs":[{"internalType":"int256","name":"r","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceWithCallback","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"}]
1+
[{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"CustomErr","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"NoIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"str","type":"string"}],"name":"NoIndexEventString","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"balance","type":"uint64"},{"internalType":"uint256","name":"dailyLimit","type":"uint256"}],"indexed":false,"internalType":"struct NetworkDebugSubContract.Account","name":"a","type":"tuple"}],"name":"NoIndexStructEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"a","type":"uint256"}],"name":"OneIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"ThreeIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"}],"name":"TwoIndexEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"alwaysRevertsCustomError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"trace","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"traceOneInt","outputs":[{"internalType":"int256","name":"r","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceWithCallback","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"}]

contracts/bin/NetworkDebugContract.bin

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
608060405234801561001057600080fd5b506104d3806100206000396000f3fe60806040526004361061003f5760003560e01c8063047c4425146100445780631b9265b8146100815780633e41f1351461008b578063fa8fca7a146100c8575b600080fd5b34801561005057600080fd5b5061006b600480360381019061006691906102f5565b610105565b6040516100789190610331565b60405180910390f35b610089610152565b005b34801561009757600080fd5b506100b260048036038101906100ad919061034c565b610154565b6040516100bf9190610331565b60405180910390f35b3480156100d457600080fd5b506100ef60048036038101906100ea919061034c565b6101bd565b6040516100fc9190610331565b60405180910390f35b60007f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161013691906103cd565b60405180910390a160038261014b9190610417565b9050919050565b565b60006002826101639190610417565b91503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836101b59190610417565b905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a360003373ffffffffffffffffffffffffffffffffffffffff1663fbcb8d07846040518263ffffffff1660e01b815260040161023e9190610331565b6020604051808303816000875af115801561025d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102819190610470565b9050807feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a28091505092915050565b600080fd5b6000819050919050565b6102d2816102bf565b81146102dd57600080fd5b50565b6000813590506102ef816102c9565b92915050565b60006020828403121561030b5761030a6102ba565b5b6000610319848285016102e0565b91505092915050565b61032b816102bf565b82525050565b60006020820190506103466000830184610322565b92915050565b60008060408385031215610363576103626102ba565b5b6000610371858286016102e0565b9250506020610382858286016102e0565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103b78261038c565b9050919050565b6103c7816103ac565b82525050565b60006020820190506103e260008301846103be565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610422826102bf565b915061042d836102bf565b925082820190508281121560008312168382126000841215161715610455576104546103e8565b5b92915050565b60008151905061046a816102c9565b92915050565b600060208284031215610486576104856102ba565b5b60006104948482850161045b565b9150509291505056fea264697066735822122088d372309217497198076ac003e8e85e857943997e8db2f90570f6934589b5b964736f6c63430008130033
1+
608060405234801561001057600080fd5b506105f4806100206000396000f3fe60806040526004361061004a5760003560e01c8063047c44251461004f57806311abb0021461008c5780631b9265b8146100b55780633e41f135146100bf578063fa8fca7a146100fc575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610368565b610139565b60405161008391906103a4565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906103f5565b610186565b005b6100bd6101c5565b005b3480156100cb57600080fd5b506100e660048036038101906100e19190610435565b6101c7565b6040516100f391906103a4565b60405180910390f35b34801561010857600080fd5b50610123600480360381019061011e9190610435565b610230565b60405161013091906103a4565b60405180910390f35b60007f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161016a91906104b6565b60405180910390a160038261017f9190610500565b9050919050565b81816040517f4a2eaf7e0000000000000000000000000000000000000000000000000000000081526004016101bc929190610553565b60405180910390fd5b565b60006002826101d69190610500565b91503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836102289190610500565b905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a360003373ffffffffffffffffffffffffffffffffffffffff1663fbcb8d07846040518263ffffffff1660e01b81526004016102b191906103a4565b6020604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f49190610591565b9050807feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a28091505092915050565b600080fd5b6000819050919050565b61034581610332565b811461035057600080fd5b50565b6000813590506103628161033c565b92915050565b60006020828403121561037e5761037d61032d565b5b600061038c84828501610353565b91505092915050565b61039e81610332565b82525050565b60006020820190506103b96000830184610395565b92915050565b6000819050919050565b6103d2816103bf565b81146103dd57600080fd5b50565b6000813590506103ef816103c9565b92915050565b6000806040838503121561040c5761040b61032d565b5b600061041a858286016103e0565b925050602061042b858286016103e0565b9150509250929050565b6000806040838503121561044c5761044b61032d565b5b600061045a85828601610353565b925050602061046b85828601610353565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104a082610475565b9050919050565b6104b081610495565b82525050565b60006020820190506104cb60008301846104a7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061050b82610332565b915061051683610332565b92508282019050828112156000831216838212600084121516171561053e5761053d6104d1565b5b92915050565b61054d816103bf565b82525050565b60006040820190506105686000830185610544565b6105756020830184610544565b9392505050565b60008151905061058b8161033c565b92915050565b6000602082840312156105a7576105a661032d565b5b60006105b58482850161057c565b9150509291505056fea2646970667358221220e1f967a055585aa7f00afcc65e7374aca7ee992f6da265b4b82d7c2b38f461c864736f6c63430008130033

0 commit comments

Comments
 (0)