From c064b1d94d29bebbe6d81419435590aa26daf67f Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 9 Oct 2017 11:30:49 +0200 Subject: [PATCH] contracts/release,eth,accounts/abi/bind/backends updated contract code + support subscribe logs - update release contract code for solidity 0.4 - add support for subscribing to filter events in simulated backend and contract backend --- accounts/abi/bind/backends/simulated.go | 7 +++++ contracts/release/contract.go | 34 ++++++++++++++++++------- contracts/release/contract.sol | 2 +- contracts/release/release.go | 10 +++++++- eth/bind.go | 34 ++++++++++++++++++++++++- 5 files changed, 75 insertions(+), 12 deletions(-) diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index 0621e81c2b..82a3a5973f 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -303,6 +303,13 @@ func (b *SimulatedBackend) AdjustTime(adjustment time.Duration) error { return nil } +// SubscribeFilterLogs emits logs that match the given criteria over the given channel. +// +// Note: it is currently not implemented. +func (b *SimulatedBackend) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error) { + return nil, fmt.Errorf("not implemented") +} + // callmsg implements core.Message to allow passing it as a transaction simulator. type callmsg struct { ethereum.CallMsg diff --git a/contracts/release/contract.go b/contracts/release/contract.go index 6a0b099311..a5712ede80 100644 --- a/contracts/release/contract.go +++ b/contracts/release/contract.go @@ -1,5 +1,5 @@ -// This file is an automatically generated Go binding. Do not modify as any -// change will likely be lost upon the next re-generation! +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. package release @@ -14,10 +14,10 @@ import ( ) // ReleaseOracleABI is the input ABI used to generate the binding from. -const ReleaseOracleABI = `[{"constant":true,"inputs":[],"name":"proposedVersion","outputs":[{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"commit","type":"bytes20"},{"name":"pass","type":"address[]"},{"name":"fail","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[],"name":"signers","outputs":[{"name":"","type":"address[]"}],"type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"}],"name":"demote","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"authVotes","outputs":[{"name":"promote","type":"address[]"},{"name":"demote","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[],"name":"currentVersion","outputs":[{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"commit","type":"bytes20"},{"name":"time","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"nuke","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"authProposals","outputs":[{"name":"","type":"address[]"}],"type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"}],"name":"promote","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"commit","type":"bytes20"}],"name":"release","outputs":[],"type":"function"},{"inputs":[{"name":"signers","type":"address[]"}],"type":"constructor"}]` +const ReleaseOracleABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"proposedVersion\",\"outputs\":[{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"commit\",\"type\":\"bytes20\"},{\"name\":\"pass\",\"type\":\"address[]\"},{\"name\":\"fail\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signers\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"}],\"name\":\"demote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"}],\"name\":\"authVotes\",\"outputs\":[{\"name\":\"promote\",\"type\":\"address[]\"},{\"name\":\"demote\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentVersion\",\"outputs\":[{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"commit\",\"type\":\"bytes20\"},{\"name\":\"time\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"nuke\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authProposals\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"user\",\"type\":\"address\"}],\"name\":\"promote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"commit\",\"type\":\"bytes20\"}],\"name\":\"release\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"signers\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]" // ReleaseOracleBin is the compiled bytecode used for deploying new contracts. -const ReleaseOracleBin = `0x606060405260405161135338038061135383398101604052805101600081516000141561008457600160a060020a0333168152602081905260408120805460ff19166001908117909155805480820180835582818380158290116100ff576000838152602090206100ff9181019083015b8082111561012f5760008155600101610070565b5060005b815181101561011f5760016000600050600084848151811015610002576020908102909101810151600160a060020a03168252810191909152604001600020805460ff1916909117905560018054808201808355828183801582901161013357600083815260209020610133918101908301610070565b5050506000928352506020909120018054600160a060020a031916331790555b50506111df806101746000396000f35b5090565b50505091909060005260206000209001600084848151811015610002575050506020838102850101518154600160a060020a0319161790555060010161008856606060405236156100775760e060020a600035046326db7648811461007957806346f0975a1461019e5780635c3d005d1461020a57806364ed31fe146102935780639d888e861461038d578063bc8fbbf8146103b2578063bf8ecf9c146103fc578063d0e0813a14610468578063d67cbec914610479575b005b610496604080516020818101835260008083528351808301855281815260045460068054875181870281018701909852808852939687968796879691959463ffffffff818116956401000000008304821695604060020a840490921694606060020a938490049093029390926007929184919083018282801561012657602002820191906000526020600020905b8154600160a060020a0316815260019190910190602001808311610107575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561018357602002820191906000526020600020905b8154600160a060020a0316815260019190910190602001808311610164575b50505050509050955095509550955095509550909192939495565b6040805160208181018352600082526001805484518184028101840190955280855261055894928301828280156101ff57602002820191906000526020600020905b8154600160a060020a03168152600191909101906020018083116101e0575b505050505090505b90565b61007760043561066d8160005b600160a060020a033316600090815260208190526040812054819060ff161561070057600160a060020a038416815260026020526040812091505b8154811015610706578154600160a060020a033316908390839081101561000257600091825260209091200154600160a060020a0316141561075157610700565b6105a26004356040805160208181018352600080835283518083018552818152600160a060020a038616825260028352908490208054855181850281018501909652808652939491939092600184019291849183018282801561032057602002820191906000526020600020905b8154600160a060020a0316815260019190910190602001808311610301575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561037d57602002820191906000526020600020905b8154600160a060020a031681526001919091019060200180831161035e575b5050505050905091509150915091565b61062760006000600060006000600060086000508054905060001415610670576106f1565b6100776106f96000808080805b600160a060020a033316600090815260208190526040812054819060ff16156111b657821580156103f257506006546000145b15610c2e576111b6565b6040805160208181018352600082526003805484518184028101840190955280855261055894928301828280156101ff57602002820191906000526020600020908154600160a060020a03168152600191909101906020018083116101e0575b50505050509050610207565b61007760043561066d816001610217565b6100776004356024356044356064356107008484848460016103bf565b604051808763ffffffff1681526020018663ffffffff1681526020018563ffffffff168152602001846bffffffffffffffffffffffff1916815260200180602001806020018381038352858181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018381038252848181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019850505050505050505060405180910390f35b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040518080602001806020018381038352858181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018381038252848181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500194505050505060405180910390f35b6040805163ffffffff9687168152948616602086015292909416838301526bffffffffffffffffffffffff19166060830152608082019290925290519081900360a00190f35b50565b600880546000198101908110156100025760009182526004027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30190508054600182015463ffffffff8281169950640100000000830481169850604060020a8304169650606060020a91829004909102945067ffffffffffffffff16925090505b509091929394565b565b505050505b50505050565b5060005b60018201548110156107595733600160a060020a03168260010160005082815481101561000257600091825260209091200154600160a060020a031614156107a357610700565b600101610252565b8154600014801561076e575060018201546000145b156107cb57600380546001810180835582818380158290116107ab578183600052602060002091820191016107ab9190610851565b60010161070a565b5050506000928352506020909120018054600160a060020a031916851790555b821561086957815460018101808455839190828183801582901161089e5760008381526020902061089e918101908301610851565b5050506000928352506020909120018054600160a060020a031916851790555b600160a060020a038416600090815260026020908152604082208054838255818452918320909291610b2f91908101905b808211156108655760008155600101610851565b5090565b816001016000508054806001018281815481835581811511610950578183600052602060002091820191016109509190610851565b5050506000928352506020909120018054600160a060020a031916331790556001548254600290910490116108d257610700565b8280156108f85750600160a060020a03841660009081526020819052604090205460ff16155b1561098757600160a060020a0384166000908152602081905260409020805460ff1916600190811790915580548082018083558281838015829011610800578183600052602060002091820191016108009190610851565b5050506000928352506020909120018054600160a060020a031916331790556001805490830154600290910490116108d257610700565b821580156109ad5750600160a060020a03841660009081526020819052604090205460ff165b156108205750600160a060020a0383166000908152602081905260408120805460ff191690555b6001548110156108205783600160a060020a0316600160005082815481101561000257600091825260209091200154600160a060020a03161415610aa357600180546000198101908110156100025760206000908120929052600180549290910154600160a060020a031691839081101561000257906000526020600020900160006101000a815481600160a060020a030219169083021790555060016000508054809190600190039090815481835581811511610aab57600083815260209020610aab918101908301610851565b6001016109d4565b5050600060048181556005805467ffffffffffffffff19169055600680548382558184529194509192508290610b05907ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90810190610851565b5060018201805460008083559182526020909120610b2591810190610851565b5050505050610820565b5060018201805460008083559182526020909120610b4f91810190610851565b506000925050505b6003548110156107005783600160a060020a0316600360005082815481101561000257600091825260209091200154600160a060020a03161415610c2657600380546000198101908110156100025760206000908120929052600380549290910154600160a060020a031691839081101561000257906000526020600020900160006101000a815481600160a060020a0302191690830217905550600360005080548091906001900390908154818355818115116106fb576000838152602090206106fb918101908301610851565b600101610b57565b60065460001415610c8c576004805463ffffffff1916881767ffffffff0000000019166401000000008802176bffffffff00000000000000001916604060020a8702176bffffffffffffffffffffffff16606060020a808704021790555b828015610d08575060045463ffffffff8881169116141580610cc1575060045463ffffffff8781166401000000009092041614155b80610cde575060045463ffffffff868116604060020a9092041614155b80610d085750600454606060020a90819004026bffffffffffffffffffffffff1990811690851614155b15610d12576111b6565b506006905060005b8154811015610d5b578154600160a060020a033316908390839081101561000257600091825260209091200154600160a060020a03161415610da6576111b6565b5060005b6001820154811015610dae5733600160a060020a03168260010160005082815481101561000257600091825260209091200154600160a060020a03161415610de3576111b6565b600101610d1a565b8215610deb578154600181018084558391908281838015829011610e2057600083815260209020610e20918101908301610851565b600101610d5f565b816001016000508054806001018281815481835581811511610ea357818360005260206000209182019101610ea39190610851565b5050506000928352506020909120018054600160a060020a03191633179055600154825460029091049011610e54576111b6565b8215610eda576005805467ffffffffffffffff19164217905560088054600181018083558281838015829011610f2f57600402816004028360005260206000209182019101610f2f9190611048565b5050506000928352506020909120018054600160a060020a03191633179055600180549083015460029091049011610e54576111b6565b600060048181556005805467ffffffffffffffff191690556006805483825581845291929182906111bf907ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90810190610851565b5050509190906000526020600020906004020160005060048054825463ffffffff191663ffffffff9182161780845582546401000000009081900483160267ffffffff000000001991909116178084558254604060020a908190049092169091026bffffffff00000000000000001991909116178083558154606060020a908190048102819004026bffffffffffffffffffffffff9190911617825560055460018301805467ffffffffffffffff191667ffffffffffffffff9092169190911790556006805460028401805482825560008281526020902094959491928392918201918582156110a75760005260206000209182015b828111156110a7578254825591600101919060010190611025565b505050506004015b8082111561086557600080825560018201805467ffffffffffffffff191690556002820180548282558183526020832083916110879190810190610851565b506001820180546000808355918252602090912061104091810190610851565b506110cd9291505b80821115610865578054600160a060020a03191681556001016110af565b505060018181018054918401805480835560008381526020902092938301929091821561111b5760005260206000209182015b8281111561111b578254825591600101919060010190611100565b506111279291506110af565b5050600060048181556005805467ffffffffffffffff191690556006805483825581845291975091955090935084925061118691507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90810190610851565b50600182018054600080835591825260209091206111a691810190610851565b50505050506111b6565b50505050505b50505050505050565b50600182018054600080835591825260209091206111b09181019061085156` +const ReleaseOracleBin = `0x606060405234156200001057600080fd5b60405162001393380380620013938339810160405280805190910190506000815115156200009a57600160a060020a0333166000908152602081905260409020805460ff1916600190811790915580548082016200006f838262000157565b5060009182526020909120018054600160a060020a03191633600160a060020a03161790556200014f565b5060005b81518110156200014f576001600080848481518110620000ba57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560018054808201620000ff838262000157565b916000526020600020900160008484815181106200011957fe5b906020019060200201518254600160a060020a039182166101009390930a9283029190920219909116179055506001016200009e565b5050620001a7565b8154818355818115116200017e576000838152602090206200017e91810190830162000183565b505050565b620001a491905b80821115620001a057600081556001016200018a565b5090565b90565b6111dc80620001b76000396000f300606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166326db7648811461009b57806346f0975a1461017c5780635c3d005d146101e257806364ed31fe146102035780639d888e86146102bb578063bc8fbbf814610316578063bf8ecf9c14610329578063d0e0813a1461033c578063d67cbec91461035b575b600080fd5b34156100a657600080fd5b6100ae610395565b60405163ffffffff80881682528681166020830152851660408201526bffffffffffffffffffffffff198416606082015260c0608082018181529060a0830190830185818151815260200191508051906020019060200280838360005b8381101561012357808201518382015260200161010b565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561016257808201518382015260200161014a565b505050509050019850505050505050505060405180910390f35b341561018757600080fd5b61018f6104ba565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156101ce5780820151838201526020016101b6565b505050509050019250505060405180910390f35b34156101ed57600080fd5b610201600160a060020a0360043516610523565b005b341561020e57600080fd5b610222600160a060020a0360043516610531565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561026657808201518382015260200161024e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156102a557808201518382015260200161028d565b5050505090500194505050505060405180910390f35b34156102c657600080fd5b6102ce610625565b60405163ffffffff95861681529385166020850152919093166040808401919091526bffffffffffffffffffffffff199093166060830152608082015260a001905180910390f35b341561032157600080fd5b6102016106cd565b341561033457600080fd5b61018f6106dd565b341561034757600080fd5b610201600160a060020a0360043516610743565b341561036657600080fd5b61020163ffffffff600435811690602435811690604435166bffffffffffffffffffffffff196064351661074e565b6000806000806103a361104f565b6103ab61104f565b6004546006805463ffffffff808416936401000000008104821693680100000000000000008204909216926c01000000000000000000000000918290049091029190600790829060208082020160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610425575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561049f57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610481575b50505050509050955095509550955095509550909192939495565b6104c261104f565b600180548060200260200160405190810160405280929190818152602001828054801561051857602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116104fa575b505050505090505b90565b61052e816000610762565b50565b61053961104f565b61054161104f565b600160a060020a03831660009081526002602090815260409182902080549092600184019284929182820290910190519081016040528092919081815260200182805480156105b957602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161059b575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561061557602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116105f7575b5050505050905091509150915091565b6000806000806000806008805490506000141561065157600095508594508493508392508291506106c5565b60088054600019810190811061066357fe5b600091825260209091206004909102018054600182015463ffffffff80831699506401000000008304811698506801000000000000000083041696506c0100000000000000000000000091829004909102945067ffffffffffffffff16925090505b509091929394565b6106db600080808080610bff565b565b6106e561104f565b600380548060200260200160405190810160405280929190818152602001828054801561051857602002820191906000526020600020908154600160a060020a031681526001909101906020018083116104fa575050505050905090565b61052e816001610762565b61075c848484846001610bff565b50505050565b600160a060020a033316600090815260208190526040812054819060ff161561075c575050600160a060020a0382166000908152600260205260408120905b81548110156107eb578154600160a060020a033316908390839081106107c357fe5b600091825260209091200154600160a060020a031614156107e35761075c565b6001016107a1565b5060005b600182015481101561083e5733600160a060020a0316826001018281548110151561081657fe5b600091825260209091200154600160a060020a031614156108365761075c565b6001016107ef565b815415801561084f57506001820154155b1561088c5760038054600181016108668382611061565b5060009182526020909120018054600160a060020a031916600160a060020a0386161790555b82156108e45781548290600181016108a48382611061565b5060009182526020909120018054600160a060020a03191633600160a060020a0316179055600154600290835491900490116108df5761075c565b610938565b8160010180548060010182816108fa9190611061565b5060009182526020909120018054600160a060020a03191633600160a060020a0316179055600154600290600184015491900490116109385761075c565b82801561095e5750600160a060020a03841660009081526020819052604090205460ff16155b156109c257600160a060020a0384166000908152602081905260409020805460ff1916600190811790915580548082016109988382611061565b5060009182526020909120018054600160a060020a031916600160a060020a038616179055610b07565b821580156109e85750600160a060020a03841660009081526020819052604090205460ff165b15610b075750600160a060020a0383166000908152602081905260408120805460ff191690555b600154811015610b075783600160a060020a0316600182815481101515610a3257fe5b600091825260209091200154600160a060020a03161415610aff57600180546000198101908110610a5f57fe5b60009182526020909120015460018054600160a060020a039092169183908110610a8557fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556001805490610ac1906000198301611061565b50600060048181556005805467ffffffffffffffff1916905590600681610ae8828261108a565b610af660018301600061108a565b50505050610b07565b600101610a0f565b600160a060020a038416600090815260026020526040812090610b2a828261108a565b610b3860018301600061108a565b5050600090505b60035481101561075c5783600160a060020a0316600382815481101515610b6257fe5b600091825260209091200154600160a060020a03161415610bf757600380546000198101908110610b8f57fe5b60009182526020909120015460038054600160a060020a039092169183908110610bb557fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556003805490610bf1906000198301611061565b5061075c565b600101610b3f565b600160a060020a033316600090815260208190526040812054819060ff16156110465782158015610c305750600654155b15610c3a57611046565b6006541515610cb5576004805463ffffffff191663ffffffff8981169190911767ffffffff00000000191664010000000089831602176bffffffff000000000000000019166801000000000000000091881691909102176bffffffffffffffffffffffff166c01000000000000000000000000808704021790555b828015610d3f575060045463ffffffff8881169116141580610cea575060045463ffffffff8781166401000000009092041614155b80610d0c575060045463ffffffff868116680100000000000000009092041614155b80610d3f57506004546c0100000000000000000000000090819004026bffffffffffffffffffffffff1990811690851614155b15610d4957611046565b506006905060005b8154811015610d9b578154600160a060020a03331690839083908110610d7357fe5b600091825260209091200154600160a060020a03161415610d9357611046565b600101610d51565b5060005b6001820154811015610dee5733600160a060020a03168260010182815481101515610dc657fe5b600091825260209091200154600160a060020a03161415610de657611046565b600101610d9f565b8215610e46578154829060018101610e068382611061565b5060009182526020909120018054600160a060020a03191633600160a060020a031617905560015460029083549190049011610e4157611046565b610e9a565b816001018054806001018281610e5c9190611061565b5060009182526020909120018054600160a060020a03191633600160a060020a031617905560015460029060018401549190049011610e9a57611046565b821561100d576005805467ffffffffffffffff19164267ffffffffffffffff161790556008805460018101610ecf83826110a8565b6000928352602090922060048054928102909101805463ffffffff191663ffffffff9384161780825582546401000000009081900485160267ffffffff000000001990911617808255825468010000000000000000908190049094169093026bffffffff0000000000000000199093169290921780835581546c01000000000000000000000000908190048102819004026bffffffffffffffffffffffff90911617825560055460018301805467ffffffffffffffff191667ffffffffffffffff909216919091179055600680549192916002830190610fb290829084906110d4565b5060018281018054610fc792840191906110d4565b5050600060048181556005805467ffffffffffffffff191690559450925060069150829050610ff6828261108a565b61100460018301600061108a565b50505050611046565b600060048181556005805467ffffffffffffffff1916905590600681611033828261108a565b61104160018301600061108a565b505050505b50505050505050565b60206040519081016040526000815290565b81548183558181151161108557600083815260209020611085918101908301611124565b505050565b508054600082559060005260206000209081019061052e9190611124565b81548183558181151161108557600402816004028360005260206000209182019101611085919061113e565b8280548282559060005260206000209081019282156111145760005260206000209182015b828111156111145782548255916001019190600101906110f9565b5061112092915061118c565b5090565b61052091905b80821115611120576000815560010161112a565b61052091905b8082111561112057600080825560018201805467ffffffffffffffff191690556002820181611173828261108a565b61118160018301600061108a565b505050600401611144565b61052091905b80821115611120578054600160a060020a03191681556001016111925600a165627a7a7230582008741e499656a10518e57b8480347f2057c123a4c105b88e0f7b88e2f5a796820029` // DeployReleaseOracle deploys a new Ethereum contract, binding an instance of ReleaseOracle to it. func DeployReleaseOracle(auth *bind.TransactOpts, backend bind.ContractBackend, signers []common.Address) (common.Address, *types.Transaction, *ReleaseOracle, error) { @@ -36,6 +36,7 @@ func DeployReleaseOracle(auth *bind.TransactOpts, backend bind.ContractBackend, type ReleaseOracle struct { ReleaseOracleCaller // Read-only binding to the contract ReleaseOracleTransactor // Write-only binding to the contract + ReleaseOracleEventer // Event listener binding to the contract } // ReleaseOracleCaller is an auto generated read-only Go binding around an Ethereum contract. @@ -48,6 +49,12 @@ type ReleaseOracleTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } +// ReleaseOracleEventer is an auto generated write-only Go binding around an Ethereum contract. +type ReleaseOracleEventer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls + address common.Address // Contract address +} + // ReleaseOracleSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. type ReleaseOracleSession struct { @@ -87,7 +94,7 @@ type ReleaseOracleTransactorRaw struct { // NewReleaseOracle creates a new instance of ReleaseOracle, bound to a specific deployed contract. func NewReleaseOracle(address common.Address, backend bind.ContractBackend) (*ReleaseOracle, error) { - contract, err := bindReleaseOracle(address, backend, backend) + contract, err := bindReleaseOracle(address, backend, backend, backend) if err != nil { return nil, err } @@ -96,7 +103,7 @@ func NewReleaseOracle(address common.Address, backend bind.ContractBackend) (*Re // NewReleaseOracleCaller creates a new read-only instance of ReleaseOracle, bound to a specific deployed contract. func NewReleaseOracleCaller(address common.Address, caller bind.ContractCaller) (*ReleaseOracleCaller, error) { - contract, err := bindReleaseOracle(address, caller, nil) + contract, err := bindReleaseOracle(address, caller, nil, nil) if err != nil { return nil, err } @@ -105,20 +112,29 @@ func NewReleaseOracleCaller(address common.Address, caller bind.ContractCaller) // NewReleaseOracleTransactor creates a new write-only instance of ReleaseOracle, bound to a specific deployed contract. func NewReleaseOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*ReleaseOracleTransactor, error) { - contract, err := bindReleaseOracle(address, nil, transactor) + contract, err := bindReleaseOracle(address, nil, transactor, nil) if err != nil { return nil, err } return &ReleaseOracleTransactor{contract: contract}, nil } +// NewReleaseOracleEventer creates a new listen only instance of ReleaseOracle, bound to a specific deployed contract. +func NewReleaseOracleEventer(address common.Address, eventer bind.ContractEventer) (*ReleaseOracleEventer, error) { + contract, err := bindReleaseOracle(address, nil, nil, eventer) + if err != nil { + return nil, err + } + return &ReleaseOracleEventer{contract: contract, address: address}, nil +} + // bindReleaseOracle binds a generic wrapper to an already deployed contract. -func bindReleaseOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor) (*bind.BoundContract, error) { +func bindReleaseOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, eventer bind.ContractEventer) (*bind.BoundContract, error) { parsed, err := abi.JSON(strings.NewReader(ReleaseOracleABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor), nil + return bind.NewBoundContract(address, parsed, caller, transactor, eventer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/contracts/release/contract.sol b/contracts/release/contract.sol index 554cf72900..8d9cbf9f37 100644 --- a/contracts/release/contract.sol +++ b/contracts/release/contract.sol @@ -58,7 +58,7 @@ contract ReleaseOracle { // isSigner is a modifier to authorize contract transactions. modifier isSigner() { if (authorised[msg.sender]) { - _ + _; } } diff --git a/contracts/release/release.go b/contracts/release/release.go index 28a35381d4..47edc999c6 100644 --- a/contracts/release/release.go +++ b/contracts/release/release.go @@ -28,6 +28,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/filters" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/les" "github.com/ethereum/go-ethereum/log" @@ -62,19 +63,26 @@ type ReleaseService struct { func NewReleaseService(ctx *node.ServiceContext, config Config) (node.Service, error) { // Retrieve the Ethereum service dependency to access the blockchain var apiBackend ethapi.Backend + var filterBackend filters.Backend var ethereum *eth.Ethereum + lightMode := false + if err := ctx.Service(ðereum); err == nil { apiBackend = ethereum.ApiBackend + filterBackend = ethereum.ApiBackend } else { var ethereum *les.LightEthereum if err := ctx.Service(ðereum); err == nil { apiBackend = ethereum.ApiBackend + filterBackend = ethereum.ApiBackend + lightMode = true } else { return nil, err } } + // Construct the release service - contract, err := NewReleaseOracle(config.Oracle, eth.NewContractBackend(apiBackend)) + contract, err := NewReleaseOracle(config.Oracle, eth.NewContractBackend(apiBackend, filterBackend, lightMode)) if err != nil { return nil, err } diff --git a/eth/bind.go b/eth/bind.go index d09977dbc2..d2b4334bd2 100644 --- a/eth/bind.go +++ b/eth/bind.go @@ -24,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/filters" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" @@ -40,15 +41,17 @@ type ContractBackend struct { eapi *ethapi.PublicEthereumAPI // Wrapper around the Ethereum object to access metadata bcapi *ethapi.PublicBlockChainAPI // Wrapper around the blockchain to access chain data txapi *ethapi.PublicTransactionPoolAPI // Wrapper around the transaction pool to access transaction data + es *filters.EventSystem // Enable log subscriptions } // NewContractBackend creates a new native contract backend using an existing // Ethereum object. -func NewContractBackend(apiBackend ethapi.Backend) *ContractBackend { +func NewContractBackend(apiBackend ethapi.Backend, filterBackend filters.Backend, lightMode bool) *ContractBackend { return &ContractBackend{ eapi: ethapi.NewPublicEthereumAPI(apiBackend), bcapi: ethapi.NewPublicBlockChainAPI(apiBackend), txapi: ethapi.NewPublicTransactionPoolAPI(apiBackend, new(ethapi.AddrLocker)), + es: filters.NewEventSystem(apiBackend.EventMux(), filterBackend, lightMode), } } @@ -136,3 +139,32 @@ func (b *ContractBackend) SendTransaction(ctx context.Context, tx *types.Transac _, err := b.txapi.SendRawTransaction(ctx, raw) return err } + +// SubscribeFilterLogs emits logs that match the given criteria over the given channel. +func (b *ContractBackend) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, logs chan<- types.Log) (ethereum.Subscription, error) { + f := filters.FilterCriteria{q.FromBlock, q.ToBlock, q.Addresses, q.Topics} + l := make(chan []*types.Log) + + sub, err := b.es.SubscribeLogs(f, l) + if err != nil { + return nil, err + } + + // TODO: rewrite filters.EventSystem so SubscribeLogs + // accepts chan types.Log instead of chan []*type.Log + go func() { + for { + select { + case <-sub.Err(): + close(l) + return + case ls := <-l: + for _, l := range ls { + logs <- *l + } + } + } + }() + + return sub, nil +}