diff --git a/deploy/jobs/jobs_contracts.go b/deploy/jobs/jobs_contracts.go index 62c6c57c367d7cd64b2705e0d7c03926b166ef6d..38a7d2b1a49edd29d5767621eeb843aecab58c75 100644 --- a/deploy/jobs/jobs_contracts.go +++ b/deploy/jobs/jobs_contracts.go @@ -13,6 +13,7 @@ import ( compilers "github.com/hyperledger/burrow/deploy/compile" "github.com/hyperledger/burrow/deploy/def" "github.com/hyperledger/burrow/deploy/util" + "github.com/hyperledger/burrow/execution/errors" "github.com/hyperledger/burrow/execution/evm/abi" "github.com/hyperledger/burrow/txs/payload" log "github.com/sirupsen/logrus" @@ -390,6 +391,14 @@ func CallJob(call *def.Call, do *def.Packages) (string, []*abi.Variable, error) return "", nil, err } + if txe.Exception != nil && txe.Exception.ErrorCode() == errors.ErrorCodeExecutionReverted { + message, err := abi.UnpackRevert(txe.Result.Return) + if err != nil { + return "", nil, err + } + log.WithField("Revert Message", message).Error("transaction reverted") + return message, nil, txe.Exception.AsError() + } var result string log.Debug(txe.Result.Return) diff --git a/tests/jobs_fixtures/expected-failure-revert/deploy.yaml b/tests/jobs_fixtures/expected-failure-revert/deploy.yaml new file mode 100644 index 0000000000000000000000000000000000000000..16246e094b9841f9f05d204aa5acffc364f3bfd7 --- /dev/null +++ b/tests/jobs_fixtures/expected-failure-revert/deploy.yaml @@ -0,0 +1,20 @@ +jobs: + +- name: deployRevert + deploy: + contract: revert.sol + +- name: doNotRevert + call: + destination: $deployRevert + function: RevertIf0 + data: + - 1 + +- name: doRevert + call: + destination: $deployRevert + function: RevertIf0 + data: + - 0 + diff --git a/tests/jobs_fixtures/expected-failure-revert/revert.sol b/tests/jobs_fixtures/expected-failure-revert/revert.sol new file mode 100644 index 0000000000000000000000000000000000000000..f755adcb51f47615a355868afd833c53c902f06f --- /dev/null +++ b/tests/jobs_fixtures/expected-failure-revert/revert.sol @@ -0,0 +1,10 @@ +pragma solidity ^0.4.16; + +contract Revert { + function RevertIf0(uint32 i) public pure + { + if (i == 0) { + revert("arbeidsongeschiktheidsverzekeringsmaatschappij"); + } + } +}