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