github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/contracts/chequebook/contract/chequebook.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //代码生成-不要编辑。 10 //此文件是生成的绑定,任何手动更改都将丢失。 11 12 package contract 13 14 import ( 15 "math/big" 16 "strings" 17 18 ethereum "github.com/ethereum/go-ethereum" 19 "github.com/ethereum/go-ethereum/accounts/abi" 20 "github.com/ethereum/go-ethereum/accounts/abi/bind" 21 "github.com/ethereum/go-ethereum/common" 22 "github.com/ethereum/go-ethereum/core/types" 23 "github.com/ethereum/go-ethereum/event" 24 ) 25 26 //ChequebookABI is the input ABI used to generate the binding from. 27 const ChequebookABI = "[{\"constant\":false,\"inputs\":[],\"name\":\"kill\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"sent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"beneficiary\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"sig_v\",\"type\":\"uint8\"},{\"name\":\"sig_r\",\"type\":\"bytes32\"},{\"name\":\"sig_s\",\"type\":\"bytes32\"}],\"name\":\"cash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"deadbeat\",\"type\":\"address\"}],\"name\":\"Overdraft\",\"type\":\"event\"}]" 28 29 //checkbookbin是用于部署新合同的编译字节码。 30 const ChequebookBin = `0x606060405260008054600160a060020a033316600160a060020a03199091161790556102ec806100306000396000f3006060604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166341c0e1b581146100585780637bf786f81461006b578063fbf788d61461009c575b005b341561006357600080fd5b6100566100ca565b341561007657600080fd5b61008a600160a060020a03600435166100f1565b60405190815260200160405180910390f35b34156100a757600080fd5b610056600160a060020a036004351660243560ff60443516606435608435610103565b60005433600160a060020a03908116911614156100ef57600054600160a060020a0316ff5b565b60016020526000908152604090205481565b600160a060020a0385166000908152600160205260408120548190861161012957600080fd5b3087876040516c01000000000000000000000000600160a060020a03948516810282529290931690910260148301526028820152604801604051809103902091506001828686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156101cf57600080fd5b505060206040510351600054600160a060020a039081169116146101f257600080fd5b50600160a060020a03808716600090815260016020526040902054860390301631811161026257600160a060020a0387166000818152600160205260409081902088905582156108fc0290839051600060405180830381858888f19350505050151561025d57600080fd5b6102b7565b6000547f2250e2993c15843b32621c89447cc589ee7a9f049c026986e545d3c2c0c6f97890600160a060020a0316604051600160a060020a03909116815260200160405180910390a186600160a060020a0316ff5b505050505050505600a165627a7a72305820533e856fc37e3d64d1706bcc7dfb6b1d490c8d566ea498d9d01ec08965a896ca0029` 31 32 //Deploychequebook部署新的以太坊合同,将支票簿的实例绑定到该合同。 33 func DeployChequebook(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Chequebook, error) { 34 parsed, err := abi.JSON(strings.NewReader(ChequebookABI)) 35 if err != nil { 36 return common.Address{}, nil, nil, err 37 } 38 address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ChequebookBin), backend) 39 if err != nil { 40 return common.Address{}, nil, nil, err 41 } 42 return address, tx, &Chequebook{ChequebookCaller: ChequebookCaller{contract: contract}, ChequebookTransactor: ChequebookTransactor{contract: contract}, ChequebookFilterer: ChequebookFilterer{contract: contract}}, nil 43 } 44 45 //支票簿是围绕以太坊合同自动生成的Go绑定。 46 type Chequebook struct { 47 ChequebookCaller //对合同具有只读约束力 48 ChequebookTransactor //只写对合同有约束力 49 ChequebookFilterer //合同事件的日志筛选程序 50 } 51 52 //支票簿调用者是围绕以太坊合同自动生成的只读Go绑定。 53 type ChequebookCaller struct { 54 contract *bind.BoundContract //用于低级调用的通用协定包装器 55 } 56 57 //支票簿交易是围绕以太坊合同自动生成的只写即用绑定。 58 type ChequebookTransactor struct { 59 contract *bind.BoundContract //用于低级调用的通用协定包装器 60 } 61 62 //支票簿筛选器是围绕以太坊合同事件自动生成的日志筛选Go绑定。 63 type ChequebookFilterer struct { 64 contract *bind.BoundContract //用于低级调用的通用协定包装器 65 } 66 67 //ChequebookSession is an auto generated Go binding around an Ethereum contract, 68 //具有预设的调用和事务处理选项。 69 type ChequebookSession struct { 70 Contract *Chequebook //为其设置会话的通用约定绑定 71 CallOpts bind.CallOpts //在整个会话中使用的调用选项 72 TransactOpts bind.TransactOpts //要在此会话中使用的事务验证选项 73 } 74 75 //CheQueBooCoprError会话是一个围绕Ethunm合同的自动生成只读GO绑定, 76 //带预设通话选项。 77 type ChequebookCallerSession struct { 78 Contract *ChequebookCaller //用于设置会话的通用协定调用方绑定 79 CallOpts bind.CallOpts //在整个会话中使用的调用选项 80 } 81 82 //支票簿事务会话是围绕以太坊合同自动生成的只写即用绑定, 83 //具有预设的Transact选项。 84 type ChequebookTransactorSession struct { 85 Contract *ChequebookTransactor //用于设置会话的通用合同事务处理程序绑定 86 TransactOpts bind.TransactOpts //要在此会话中使用的事务验证选项 87 } 88 89 //ChequebookRaw是围绕以太坊合同自动生成的低级Go绑定。 90 type ChequebookRaw struct { 91 Contract *Chequebook //用于访问上的原始方法的通用合同绑定 92 } 93 94 //支票簿Callerraw是围绕以太坊合同自动生成的低级只读Go绑定。 95 type ChequebookCallerRaw struct { 96 Contract *ChequebookCaller //用于访问上的原始方法的通用只读协定绑定 97 } 98 99 //支票簿Transactorraw是围绕以太坊合同自动生成的低级只写即用绑定。 100 type ChequebookTransactorRaw struct { 101 Contract *ChequebookTransactor //用于访问上的原始方法的通用只写协定绑定 102 } 103 104 //newcheckbook创建一个新的checkbook实例,绑定到特定的已部署合同。 105 func NewChequebook(address common.Address, backend bind.ContractBackend) (*Chequebook, error) { 106 contract, err := bindChequebook(address, backend, backend, backend) 107 if err != nil { 108 return nil, err 109 } 110 return &Chequebook{ChequebookCaller: ChequebookCaller{contract: contract}, ChequebookTransactor: ChequebookTransactor{contract: contract}, ChequebookFilterer: ChequebookFilterer{contract: contract}}, nil 111 } 112 113 //newcheckbookcaller创建一个新的支票簿只读实例,绑定到特定的已部署合同。 114 func NewChequebookCaller(address common.Address, caller bind.ContractCaller) (*ChequebookCaller, error) { 115 contract, err := bindChequebook(address, caller, nil, nil) 116 if err != nil { 117 return nil, err 118 } 119 return &ChequebookCaller{contract: contract}, nil 120 } 121 122 //newcheckbooktransaction创建一个新的支票簿的只写实例,绑定到特定的已部署合同。 123 func NewChequebookTransactor(address common.Address, transactor bind.ContractTransactor) (*ChequebookTransactor, error) { 124 contract, err := bindChequebook(address, nil, transactor, nil) 125 if err != nil { 126 return nil, err 127 } 128 return &ChequebookTransactor{contract: contract}, nil 129 } 130 131 //newcheckbookfilter创建一个新的checkbook日志过滤器实例,绑定到一个特定的已部署合同。 132 func NewChequebookFilterer(address common.Address, filterer bind.ContractFilterer) (*ChequebookFilterer, error) { 133 contract, err := bindChequebook(address, nil, nil, filterer) 134 if err != nil { 135 return nil, err 136 } 137 return &ChequebookFilterer{contract: contract}, nil 138 } 139 140 //bindcheckbook将通用包装绑定到已部署的协定。 141 func bindChequebook(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { 142 parsed, err := abi.JSON(strings.NewReader(ChequebookABI)) 143 if err != nil { 144 return nil, err 145 } 146 return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil 147 } 148 149 //调用调用(常量)contract方法,参数作为输入值,并且 150 //将输出设置为结果。结果类型可能是用于 151 //返回、匿名返回的接口切片和命名的结构 152 //返回。 153 func (_Chequebook *ChequebookRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { 154 return _Chequebook.Contract.ChequebookCaller.contract.Call(opts, result, method, params...) 155 } 156 157 //转账启动普通交易以将资金转移到合同,调用 158 //它的默认方法(如果有)。 159 func (_Chequebook *ChequebookRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { 160 return _Chequebook.Contract.ChequebookTransactor.contract.Transfer(opts) 161 } 162 163 //Transact使用参数作为输入值调用(付费)Contract方法。 164 func (_Chequebook *ChequebookRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { 165 return _Chequebook.Contract.ChequebookTransactor.contract.Transact(opts, method, params...) 166 } 167 168 //调用调用(常量)contract方法,参数作为输入值,并且 169 //将输出设置为结果。结果类型可能是用于 170 //返回、匿名返回的接口切片和命名的结构 171 //返回。 172 func (_Chequebook *ChequebookCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { 173 return _Chequebook.Contract.contract.Call(opts, result, method, params...) 174 } 175 176 //转账启动普通交易以将资金转移到合同,调用 177 //它的默认方法(如果有)。 178 func (_Chequebook *ChequebookTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { 179 return _Chequebook.Contract.contract.Transfer(opts) 180 } 181 182 //Transact使用参数作为输入值调用(付费)Contract方法。 183 func (_Chequebook *ChequebookTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { 184 return _Chequebook.Contract.contract.Transact(opts, method, params...) 185 } 186 187 //发送是一个绑定合同方法0x7Bf786f8的免费数据检索调用。 188 // 189 //solidity:函数发送(地址)常量返回(uint256) 190 func (_Chequebook *ChequebookCaller) Sent(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { 191 var ( 192 ret0 = new(*big.Int) 193 ) 194 out := ret0 195 err := _Chequebook.contract.Call(opts, out, "sent", arg0) 196 return *ret0, err 197 } 198 199 //发送是一个绑定合同方法0x7Bf786f8的免费数据检索调用。 200 // 201 //solidity:函数发送(地址)常量返回(uint256) 202 func (_Chequebook *ChequebookSession) Sent(arg0 common.Address) (*big.Int, error) { 203 return _Chequebook.Contract.Sent(&_Chequebook.CallOpts, arg0) 204 } 205 206 //发送是一个绑定合同方法0x7Bf786f8的免费数据检索调用。 207 // 208 //solidity:函数发送(地址)常量返回(uint256) 209 func (_Chequebook *ChequebookCallerSession) Sent(arg0 common.Address) (*big.Int, error) { 210 return _Chequebook.Contract.Sent(&_Chequebook.CallOpts, arg0) 211 } 212 213 //现金是一个受合同方法0xFBF788D6约束的已付款的变元交易。 214 // 215 //Solidity: function cash(beneficiary address, amount uint256, sig_v uint8, sig_r bytes32, sig_s bytes32) returns() 216 func (_Chequebook *ChequebookTransactor) Cash(opts *bind.TransactOpts, beneficiary common.Address, amount *big.Int, sig_v uint8, sig_r [32]byte, sig_s [32]byte) (*types.Transaction, error) { 217 return _Chequebook.contract.Transact(opts, "cash", beneficiary, amount, sig_v, sig_r, sig_s) 218 } 219 220 //现金是一个受合同方法0xFBF788D6约束的已付款的变元交易。 221 // 222 //稳固性:功能现金(受益人地址,金额:uint256,sig_v uint8,sig_r bytes 32,sig_s bytes 32)返回() 223 func (_Chequebook *ChequebookSession) Cash(beneficiary common.Address, amount *big.Int, sig_v uint8, sig_r [32]byte, sig_s [32]byte) (*types.Transaction, error) { 224 return _Chequebook.Contract.Cash(&_Chequebook.TransactOpts, beneficiary, amount, sig_v, sig_r, sig_s) 225 } 226 227 //现金是一个受合同方法0xFBF788D6约束的已付款的变元交易。 228 // 229 //稳固性:功能现金(受益人地址,金额:uint256,sig_v uint8,sig_r bytes 32,sig_s bytes 32)返回() 230 func (_Chequebook *ChequebookTransactorSession) Cash(beneficiary common.Address, amount *big.Int, sig_v uint8, sig_r [32]byte, sig_s [32]byte) (*types.Transaction, error) { 231 return _Chequebook.Contract.Cash(&_Chequebook.TransactOpts, beneficiary, amount, sig_v, sig_r, sig_s) 232 } 233 234 //kill是一个付费的mutator事务,绑定合同方法0x41c0e1b5。 235 // 236 //solidity:函数kill()返回() 237 func (_Chequebook *ChequebookTransactor) Kill(opts *bind.TransactOpts) (*types.Transaction, error) { 238 return _Chequebook.contract.Transact(opts, "kill") 239 } 240 241 //kill是一个付费的mutator事务,绑定合同方法0x41c0e1b5。 242 // 243 //solidity:函数kill()返回() 244 func (_Chequebook *ChequebookSession) Kill() (*types.Transaction, error) { 245 return _Chequebook.Contract.Kill(&_Chequebook.TransactOpts) 246 } 247 248 //kill是一个付费的mutator事务,绑定合同方法0x41c0e1b5。 249 // 250 //solidity:函数kill()返回() 251 func (_Chequebook *ChequebookTransactorSession) Kill() (*types.Transaction, error) { 252 return _Chequebook.Contract.Kill(&_Chequebook.TransactOpts) 253 } 254 255 //从filterOvertaft返回checkbookOvertaftIterator,用于对支票簿合同引发的透支事件的原始日志和未打包数据进行迭代。 256 type ChequebookOverdraftIterator struct { 257 Event *ChequebookOverdraft //包含合同细节和原始日志的事件 258 259 contract *bind.BoundContract //用于解包事件数据的通用合同 260 event string //用于解包事件数据的事件名称 261 262 logs chan types.Log //日志通道接收找到的合同事件 263 sub ethereum.Subscription //错误、完成和终止订阅 264 done bool //订阅是否完成传递日志 265 fail error //停止迭代时出错 266 } 267 268 //next将迭代器前进到后续事件,返回是否存在 269 //是否找到更多事件。在检索或分析错误的情况下,false是 270 //返回错误(),可以查询错误()的确切错误。 271 func (it *ChequebookOverdraftIterator) Next() bool { 272 //如果迭代器失败,请停止迭代 273 if it.fail != nil { 274 return false 275 } 276 //如果迭代器已完成,则直接传递可用的 277 if it.done { 278 select { 279 case log := <-it.logs: 280 it.Event = new(ChequebookOverdraft) 281 if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { 282 it.fail = err 283 return false 284 } 285 it.Event.Raw = log 286 return true 287 288 default: 289 return false 290 } 291 } 292 //迭代器仍在进行中,请等待数据或错误事件 293 select { 294 case log := <-it.logs: 295 it.Event = new(ChequebookOverdraft) 296 if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { 297 it.fail = err 298 return false 299 } 300 it.Event.Raw = log 301 return true 302 303 case err := <-it.sub.Err(): 304 it.done = true 305 it.fail = err 306 return it.Next() 307 } 308 } 309 310 //重试时出错。筛选过程中出现任何检索或分析错误。 311 func (it *ChequebookOverdraftIterator) Error() error { 312 return it.fail 313 } 314 315 //关闭终止迭代过程,释放任何挂起的基础 316 //资源。 317 func (it *ChequebookOverdraftIterator) Close() error { 318 it.sub.Unsubscribe() 319 return nil 320 } 321 322 //支票簿透支表示支票簿合同引发的透支事件。 323 type ChequebookOverdraft struct { 324 Deadbeat common.Address 325 Raw types.Log //区块链特定的上下文信息 326 } 327 328 //filter透支是一个自由的日志检索操作,绑定合同事件0x2250e2993c15843b362621c89447cc589ee7a9f049c0226986e545d3c2c0c6f978。 329 // 330 //Solidity: event Overdraft(deadbeat address) 331 func (_Chequebook *ChequebookFilterer) FilterOverdraft(opts *bind.FilterOpts) (*ChequebookOverdraftIterator, error) { 332 333 logs, sub, err := _Chequebook.contract.FilterLogs(opts, "Overdraft") 334 if err != nil { 335 return nil, err 336 } 337 return &ChequebookOverdraftIterator{contract: _Chequebook.contract, event: "Overdraft", logs: logs, sub: sub}, nil 338 } 339 340 //watchOverflft是一个免费的日志订阅操作,绑定合同事件0x2250e2993c15843b362621c89447cc589ee7a9f049c0226986e545d3c2c0c6f978。 341 // 342 //坚固性:事件透支(死区地址) 343 func (_Chequebook *ChequebookFilterer) WatchOverdraft(opts *bind.WatchOpts, sink chan<- *ChequebookOverdraft) (event.Subscription, error) { 344 345 logs, sub, err := _Chequebook.contract.WatchLogs(opts, "Overdraft") 346 if err != nil { 347 return nil, err 348 } 349 return event.NewSubscription(func(quit <-chan struct{}) error { 350 defer sub.Unsubscribe() 351 for { 352 select { 353 case log := <-logs: 354 //新日志到达,分析事件并转发给用户 355 event := new(ChequebookOverdraft) 356 if err := _Chequebook.contract.UnpackLog(event, "Overdraft", log); err != nil { 357 return err 358 } 359 event.Raw = log 360 361 select { 362 case sink <- event: 363 case err := <-sub.Err(): 364 return err 365 case <-quit: 366 return nil 367 } 368 case err := <-sub.Err(): 369 return err 370 case <-quit: 371 return nil 372 } 373 } 374 }), nil 375 }