feat: add support for erc1155
This commit is contained in:
parent
fd1dce03bc
commit
101f1aeca3
|
@ -0,0 +1 @@
|
||||||
|
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_value","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
|
|
@ -0,0 +1,3 @@
|
||||||
|
package ierc1155
|
||||||
|
|
||||||
|
//go:generate abigen -abi ./ERC1155.abi -pkg ierc1155 -out ierc1155.go
|
|
@ -0,0 +1,964 @@
|
||||||
|
// Code generated - DO NOT EDIT.
|
||||||
|
// This file is a generated binding and any manual changes will be lost.
|
||||||
|
|
||||||
|
package ierc1155
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"math/big"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
ethereum "github.com/ethereum/go-ethereum"
|
||||||
|
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||||
|
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
"github.com/ethereum/go-ethereum/event"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var (
|
||||||
|
_ = errors.New
|
||||||
|
_ = big.NewInt
|
||||||
|
_ = strings.NewReader
|
||||||
|
_ = ethereum.NotFound
|
||||||
|
_ = bind.Bind
|
||||||
|
_ = common.Big1
|
||||||
|
_ = types.BloomLookup
|
||||||
|
_ = event.NewSubscription
|
||||||
|
_ = abi.ConvertType
|
||||||
|
)
|
||||||
|
|
||||||
|
// Ierc1155MetaData contains all meta data concerning the Ierc1155 contract.
|
||||||
|
var Ierc1155MetaData = &bind.MetaData{
|
||||||
|
ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155ABI is the input ABI used to generate the binding from.
|
||||||
|
// Deprecated: Use Ierc1155MetaData.ABI instead.
|
||||||
|
var Ierc1155ABI = Ierc1155MetaData.ABI
|
||||||
|
|
||||||
|
// Ierc1155 is an auto generated Go binding around an Ethereum contract.
|
||||||
|
type Ierc1155 struct {
|
||||||
|
Ierc1155Caller // Read-only binding to the contract
|
||||||
|
Ierc1155Transactor // Write-only binding to the contract
|
||||||
|
Ierc1155Filterer // Log filterer for contract events
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155Caller is an auto generated read-only Go binding around an Ethereum contract.
|
||||||
|
type Ierc1155Caller struct {
|
||||||
|
contract *bind.BoundContract // Generic contract wrapper for the low level calls
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155Transactor is an auto generated write-only Go binding around an Ethereum contract.
|
||||||
|
type Ierc1155Transactor struct {
|
||||||
|
contract *bind.BoundContract // Generic contract wrapper for the low level calls
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
|
||||||
|
type Ierc1155Filterer struct {
|
||||||
|
contract *bind.BoundContract // Generic contract wrapper for the low level calls
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155Session is an auto generated Go binding around an Ethereum contract,
|
||||||
|
// with pre-set call and transact options.
|
||||||
|
type Ierc1155Session struct {
|
||||||
|
Contract *Ierc1155 // Generic contract binding to set the session for
|
||||||
|
CallOpts bind.CallOpts // Call options to use throughout this session
|
||||||
|
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155CallerSession is an auto generated read-only Go binding around an Ethereum contract,
|
||||||
|
// with pre-set call options.
|
||||||
|
type Ierc1155CallerSession struct {
|
||||||
|
Contract *Ierc1155Caller // Generic contract caller binding to set the session for
|
||||||
|
CallOpts bind.CallOpts // Call options to use throughout this session
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
|
||||||
|
// with pre-set transact options.
|
||||||
|
type Ierc1155TransactorSession struct {
|
||||||
|
Contract *Ierc1155Transactor // Generic contract transactor binding to set the session for
|
||||||
|
TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155Raw is an auto generated low-level Go binding around an Ethereum contract.
|
||||||
|
type Ierc1155Raw struct {
|
||||||
|
Contract *Ierc1155 // Generic contract binding to access the raw methods on
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
|
||||||
|
type Ierc1155CallerRaw struct {
|
||||||
|
Contract *Ierc1155Caller // Generic read-only contract binding to access the raw methods on
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
|
||||||
|
type Ierc1155TransactorRaw struct {
|
||||||
|
Contract *Ierc1155Transactor // Generic write-only contract binding to access the raw methods on
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewIerc1155 creates a new instance of Ierc1155, bound to a specific deployed contract.
|
||||||
|
func NewIerc1155(address common.Address, backend bind.ContractBackend) (*Ierc1155, error) {
|
||||||
|
contract, err := bindIerc1155(address, backend, backend, backend)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155{Ierc1155Caller: Ierc1155Caller{contract: contract}, Ierc1155Transactor: Ierc1155Transactor{contract: contract}, Ierc1155Filterer: Ierc1155Filterer{contract: contract}}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewIerc1155Caller creates a new read-only instance of Ierc1155, bound to a specific deployed contract.
|
||||||
|
func NewIerc1155Caller(address common.Address, caller bind.ContractCaller) (*Ierc1155Caller, error) {
|
||||||
|
contract, err := bindIerc1155(address, caller, nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155Caller{contract: contract}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewIerc1155Transactor creates a new write-only instance of Ierc1155, bound to a specific deployed contract.
|
||||||
|
func NewIerc1155Transactor(address common.Address, transactor bind.ContractTransactor) (*Ierc1155Transactor, error) {
|
||||||
|
contract, err := bindIerc1155(address, nil, transactor, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155Transactor{contract: contract}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewIerc1155Filterer creates a new log filterer instance of Ierc1155, bound to a specific deployed contract.
|
||||||
|
func NewIerc1155Filterer(address common.Address, filterer bind.ContractFilterer) (*Ierc1155Filterer, error) {
|
||||||
|
contract, err := bindIerc1155(address, nil, nil, filterer)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155Filterer{contract: contract}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// bindIerc1155 binds a generic wrapper to an already deployed contract.
|
||||||
|
func bindIerc1155(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
|
||||||
|
parsed, err := Ierc1155MetaData.GetAbi()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call invokes the (constant) contract method with params as input values and
|
||||||
|
// sets the output to result. The result type might be a single field for simple
|
||||||
|
// returns, a slice of interfaces for anonymous returns and a struct for named
|
||||||
|
// returns.
|
||||||
|
func (_Ierc1155 *Ierc1155Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
|
||||||
|
return _Ierc1155.Contract.Ierc1155Caller.contract.Call(opts, result, method, params...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transfer initiates a plain transaction to move funds to the contract, calling
|
||||||
|
// its default method if one is available.
|
||||||
|
func (_Ierc1155 *Ierc1155Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.Ierc1155Transactor.contract.Transfer(opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transact invokes the (paid) contract method with params as input values.
|
||||||
|
func (_Ierc1155 *Ierc1155Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.Ierc1155Transactor.contract.Transact(opts, method, params...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call invokes the (constant) contract method with params as input values and
|
||||||
|
// sets the output to result. The result type might be a single field for simple
|
||||||
|
// returns, a slice of interfaces for anonymous returns and a struct for named
|
||||||
|
// returns.
|
||||||
|
func (_Ierc1155 *Ierc1155CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
|
||||||
|
return _Ierc1155.Contract.contract.Call(opts, result, method, params...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transfer initiates a plain transaction to move funds to the contract, calling
|
||||||
|
// its default method if one is available.
|
||||||
|
func (_Ierc1155 *Ierc1155TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.contract.Transfer(opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transact invokes the (paid) contract method with params as input values.
|
||||||
|
func (_Ierc1155 *Ierc1155TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.contract.Transact(opts, method, params...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BalanceOf is a free data retrieval call binding the contract method 0x00fdd58e.
|
||||||
|
//
|
||||||
|
// Solidity: function balanceOf(address _owner, uint256 _id) view returns(uint256)
|
||||||
|
func (_Ierc1155 *Ierc1155Caller) BalanceOf(opts *bind.CallOpts, _owner common.Address, _id *big.Int) (*big.Int, error) {
|
||||||
|
var out []interface{}
|
||||||
|
err := _Ierc1155.contract.Call(opts, &out, "balanceOf", _owner, _id)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return *new(*big.Int), err
|
||||||
|
}
|
||||||
|
|
||||||
|
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
|
||||||
|
|
||||||
|
return out0, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// BalanceOf is a free data retrieval call binding the contract method 0x00fdd58e.
|
||||||
|
//
|
||||||
|
// Solidity: function balanceOf(address _owner, uint256 _id) view returns(uint256)
|
||||||
|
func (_Ierc1155 *Ierc1155Session) BalanceOf(_owner common.Address, _id *big.Int) (*big.Int, error) {
|
||||||
|
return _Ierc1155.Contract.BalanceOf(&_Ierc1155.CallOpts, _owner, _id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BalanceOf is a free data retrieval call binding the contract method 0x00fdd58e.
|
||||||
|
//
|
||||||
|
// Solidity: function balanceOf(address _owner, uint256 _id) view returns(uint256)
|
||||||
|
func (_Ierc1155 *Ierc1155CallerSession) BalanceOf(_owner common.Address, _id *big.Int) (*big.Int, error) {
|
||||||
|
return _Ierc1155.Contract.BalanceOf(&_Ierc1155.CallOpts, _owner, _id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BalanceOfBatch is a free data retrieval call binding the contract method 0x4e1273f4.
|
||||||
|
//
|
||||||
|
// Solidity: function balanceOfBatch(address[] _owners, uint256[] _ids) view returns(uint256[])
|
||||||
|
func (_Ierc1155 *Ierc1155Caller) BalanceOfBatch(opts *bind.CallOpts, _owners []common.Address, _ids []*big.Int) ([]*big.Int, error) {
|
||||||
|
var out []interface{}
|
||||||
|
err := _Ierc1155.contract.Call(opts, &out, "balanceOfBatch", _owners, _ids)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return *new([]*big.Int), err
|
||||||
|
}
|
||||||
|
|
||||||
|
out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
|
||||||
|
|
||||||
|
return out0, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// BalanceOfBatch is a free data retrieval call binding the contract method 0x4e1273f4.
|
||||||
|
//
|
||||||
|
// Solidity: function balanceOfBatch(address[] _owners, uint256[] _ids) view returns(uint256[])
|
||||||
|
func (_Ierc1155 *Ierc1155Session) BalanceOfBatch(_owners []common.Address, _ids []*big.Int) ([]*big.Int, error) {
|
||||||
|
return _Ierc1155.Contract.BalanceOfBatch(&_Ierc1155.CallOpts, _owners, _ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BalanceOfBatch is a free data retrieval call binding the contract method 0x4e1273f4.
|
||||||
|
//
|
||||||
|
// Solidity: function balanceOfBatch(address[] _owners, uint256[] _ids) view returns(uint256[])
|
||||||
|
func (_Ierc1155 *Ierc1155CallerSession) BalanceOfBatch(_owners []common.Address, _ids []*big.Int) ([]*big.Int, error) {
|
||||||
|
return _Ierc1155.Contract.BalanceOfBatch(&_Ierc1155.CallOpts, _owners, _ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
|
||||||
|
//
|
||||||
|
// Solidity: function isApprovedForAll(address _owner, address _operator) view returns(bool)
|
||||||
|
func (_Ierc1155 *Ierc1155Caller) IsApprovedForAll(opts *bind.CallOpts, _owner common.Address, _operator common.Address) (bool, error) {
|
||||||
|
var out []interface{}
|
||||||
|
err := _Ierc1155.contract.Call(opts, &out, "isApprovedForAll", _owner, _operator)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return *new(bool), err
|
||||||
|
}
|
||||||
|
|
||||||
|
out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
|
||||||
|
|
||||||
|
return out0, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
|
||||||
|
//
|
||||||
|
// Solidity: function isApprovedForAll(address _owner, address _operator) view returns(bool)
|
||||||
|
func (_Ierc1155 *Ierc1155Session) IsApprovedForAll(_owner common.Address, _operator common.Address) (bool, error) {
|
||||||
|
return _Ierc1155.Contract.IsApprovedForAll(&_Ierc1155.CallOpts, _owner, _operator)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
|
||||||
|
//
|
||||||
|
// Solidity: function isApprovedForAll(address _owner, address _operator) view returns(bool)
|
||||||
|
func (_Ierc1155 *Ierc1155CallerSession) IsApprovedForAll(_owner common.Address, _operator common.Address) (bool, error) {
|
||||||
|
return _Ierc1155.Contract.IsApprovedForAll(&_Ierc1155.CallOpts, _owner, _operator)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeBatchTransferFrom is a paid mutator transaction binding the contract method 0x2eb2c2d6.
|
||||||
|
//
|
||||||
|
// Solidity: function safeBatchTransferFrom(address _from, address _to, uint256[] _ids, uint256[] _values, bytes _data) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155Transactor) SafeBatchTransferFrom(opts *bind.TransactOpts, _from common.Address, _to common.Address, _ids []*big.Int, _values []*big.Int, _data []byte) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.contract.Transact(opts, "safeBatchTransferFrom", _from, _to, _ids, _values, _data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeBatchTransferFrom is a paid mutator transaction binding the contract method 0x2eb2c2d6.
|
||||||
|
//
|
||||||
|
// Solidity: function safeBatchTransferFrom(address _from, address _to, uint256[] _ids, uint256[] _values, bytes _data) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155Session) SafeBatchTransferFrom(_from common.Address, _to common.Address, _ids []*big.Int, _values []*big.Int, _data []byte) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.SafeBatchTransferFrom(&_Ierc1155.TransactOpts, _from, _to, _ids, _values, _data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeBatchTransferFrom is a paid mutator transaction binding the contract method 0x2eb2c2d6.
|
||||||
|
//
|
||||||
|
// Solidity: function safeBatchTransferFrom(address _from, address _to, uint256[] _ids, uint256[] _values, bytes _data) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155TransactorSession) SafeBatchTransferFrom(_from common.Address, _to common.Address, _ids []*big.Int, _values []*big.Int, _data []byte) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.SafeBatchTransferFrom(&_Ierc1155.TransactOpts, _from, _to, _ids, _values, _data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeTransferFrom is a paid mutator transaction binding the contract method 0xf242432a.
|
||||||
|
//
|
||||||
|
// Solidity: function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes _data) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155Transactor) SafeTransferFrom(opts *bind.TransactOpts, _from common.Address, _to common.Address, _id *big.Int, _value *big.Int, _data []byte) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.contract.Transact(opts, "safeTransferFrom", _from, _to, _id, _value, _data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeTransferFrom is a paid mutator transaction binding the contract method 0xf242432a.
|
||||||
|
//
|
||||||
|
// Solidity: function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes _data) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155Session) SafeTransferFrom(_from common.Address, _to common.Address, _id *big.Int, _value *big.Int, _data []byte) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.SafeTransferFrom(&_Ierc1155.TransactOpts, _from, _to, _id, _value, _data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeTransferFrom is a paid mutator transaction binding the contract method 0xf242432a.
|
||||||
|
//
|
||||||
|
// Solidity: function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes _data) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155TransactorSession) SafeTransferFrom(_from common.Address, _to common.Address, _id *big.Int, _value *big.Int, _data []byte) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.SafeTransferFrom(&_Ierc1155.TransactOpts, _from, _to, _id, _value, _data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
|
||||||
|
//
|
||||||
|
// Solidity: function setApprovalForAll(address _operator, bool _approved) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155Transactor) SetApprovalForAll(opts *bind.TransactOpts, _operator common.Address, _approved bool) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.contract.Transact(opts, "setApprovalForAll", _operator, _approved)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
|
||||||
|
//
|
||||||
|
// Solidity: function setApprovalForAll(address _operator, bool _approved) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155Session) SetApprovalForAll(_operator common.Address, _approved bool) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.SetApprovalForAll(&_Ierc1155.TransactOpts, _operator, _approved)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
|
||||||
|
//
|
||||||
|
// Solidity: function setApprovalForAll(address _operator, bool _approved) returns()
|
||||||
|
func (_Ierc1155 *Ierc1155TransactorSession) SetApprovalForAll(_operator common.Address, _approved bool) (*types.Transaction, error) {
|
||||||
|
return _Ierc1155.Contract.SetApprovalForAll(&_Ierc1155.TransactOpts, _operator, _approved)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155ApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155ApprovalForAllIterator struct {
|
||||||
|
Event *Ierc1155ApprovalForAll // Event containing the contract specifics and raw log
|
||||||
|
|
||||||
|
contract *bind.BoundContract // Generic contract to use for unpacking event data
|
||||||
|
event string // Event name to use for unpacking event data
|
||||||
|
|
||||||
|
logs chan types.Log // Log channel receiving the found contract events
|
||||||
|
sub ethereum.Subscription // Subscription for errors, completion and termination
|
||||||
|
done bool // Whether the subscription completed delivering logs
|
||||||
|
fail error // Occurred error to stop iteration
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next advances the iterator to the subsequent event, returning whether there
|
||||||
|
// are any more events found. In case of a retrieval or parsing error, false is
|
||||||
|
// returned and Error() can be queried for the exact failure.
|
||||||
|
func (it *Ierc1155ApprovalForAllIterator) Next() bool {
|
||||||
|
// If the iterator failed, stop iterating
|
||||||
|
if it.fail != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// If the iterator completed, deliver directly whatever's available
|
||||||
|
if it.done {
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155ApprovalForAll)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Iterator still in progress, wait for either a data or an error event
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155ApprovalForAll)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
case err := <-it.sub.Err():
|
||||||
|
it.done = true
|
||||||
|
it.fail = err
|
||||||
|
return it.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns any retrieval or parsing error occurred during filtering.
|
||||||
|
func (it *Ierc1155ApprovalForAllIterator) Error() error {
|
||||||
|
return it.fail
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close terminates the iteration process, releasing any pending underlying
|
||||||
|
// resources.
|
||||||
|
func (it *Ierc1155ApprovalForAllIterator) Close() error {
|
||||||
|
it.sub.Unsubscribe()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155ApprovalForAll represents a ApprovalForAll event raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155ApprovalForAll struct {
|
||||||
|
Owner common.Address
|
||||||
|
Operator common.Address
|
||||||
|
Approved bool
|
||||||
|
Raw types.Log // Blockchain specific contextual infos
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
|
||||||
|
//
|
||||||
|
// Solidity: event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) FilterApprovalForAll(opts *bind.FilterOpts, _owner []common.Address, _operator []common.Address) (*Ierc1155ApprovalForAllIterator, error) {
|
||||||
|
|
||||||
|
var _ownerRule []interface{}
|
||||||
|
for _, _ownerItem := range _owner {
|
||||||
|
_ownerRule = append(_ownerRule, _ownerItem)
|
||||||
|
}
|
||||||
|
var _operatorRule []interface{}
|
||||||
|
for _, _operatorItem := range _operator {
|
||||||
|
_operatorRule = append(_operatorRule, _operatorItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.FilterLogs(opts, "ApprovalForAll", _ownerRule, _operatorRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155ApprovalForAllIterator{contract: _Ierc1155.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
|
||||||
|
//
|
||||||
|
// Solidity: event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *Ierc1155ApprovalForAll, _owner []common.Address, _operator []common.Address) (event.Subscription, error) {
|
||||||
|
|
||||||
|
var _ownerRule []interface{}
|
||||||
|
for _, _ownerItem := range _owner {
|
||||||
|
_ownerRule = append(_ownerRule, _ownerItem)
|
||||||
|
}
|
||||||
|
var _operatorRule []interface{}
|
||||||
|
for _, _operatorItem := range _operator {
|
||||||
|
_operatorRule = append(_operatorRule, _operatorItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.WatchLogs(opts, "ApprovalForAll", _ownerRule, _operatorRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return event.NewSubscription(func(quit <-chan struct{}) error {
|
||||||
|
defer sub.Unsubscribe()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case log := <-logs:
|
||||||
|
// New log arrived, parse the event and forward to the user
|
||||||
|
event := new(Ierc1155ApprovalForAll)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
|
||||||
|
select {
|
||||||
|
case sink <- event:
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
|
||||||
|
//
|
||||||
|
// Solidity: event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) ParseApprovalForAll(log types.Log) (*Ierc1155ApprovalForAll, error) {
|
||||||
|
event := new(Ierc1155ApprovalForAll)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
return event, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155TransferBatchIterator is returned from FilterTransferBatch and is used to iterate over the raw logs and unpacked data for TransferBatch events raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155TransferBatchIterator struct {
|
||||||
|
Event *Ierc1155TransferBatch // Event containing the contract specifics and raw log
|
||||||
|
|
||||||
|
contract *bind.BoundContract // Generic contract to use for unpacking event data
|
||||||
|
event string // Event name to use for unpacking event data
|
||||||
|
|
||||||
|
logs chan types.Log // Log channel receiving the found contract events
|
||||||
|
sub ethereum.Subscription // Subscription for errors, completion and termination
|
||||||
|
done bool // Whether the subscription completed delivering logs
|
||||||
|
fail error // Occurred error to stop iteration
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next advances the iterator to the subsequent event, returning whether there
|
||||||
|
// are any more events found. In case of a retrieval or parsing error, false is
|
||||||
|
// returned and Error() can be queried for the exact failure.
|
||||||
|
func (it *Ierc1155TransferBatchIterator) Next() bool {
|
||||||
|
// If the iterator failed, stop iterating
|
||||||
|
if it.fail != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// If the iterator completed, deliver directly whatever's available
|
||||||
|
if it.done {
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155TransferBatch)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Iterator still in progress, wait for either a data or an error event
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155TransferBatch)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
case err := <-it.sub.Err():
|
||||||
|
it.done = true
|
||||||
|
it.fail = err
|
||||||
|
return it.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns any retrieval or parsing error occurred during filtering.
|
||||||
|
func (it *Ierc1155TransferBatchIterator) Error() error {
|
||||||
|
return it.fail
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close terminates the iteration process, releasing any pending underlying
|
||||||
|
// resources.
|
||||||
|
func (it *Ierc1155TransferBatchIterator) Close() error {
|
||||||
|
it.sub.Unsubscribe()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155TransferBatch represents a TransferBatch event raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155TransferBatch struct {
|
||||||
|
Operator common.Address
|
||||||
|
From common.Address
|
||||||
|
To common.Address
|
||||||
|
Ids []*big.Int
|
||||||
|
Values []*big.Int
|
||||||
|
Raw types.Log // Blockchain specific contextual infos
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterTransferBatch is a free log retrieval operation binding the contract event 0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb.
|
||||||
|
//
|
||||||
|
// Solidity: event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) FilterTransferBatch(opts *bind.FilterOpts, _operator []common.Address, _from []common.Address, _to []common.Address) (*Ierc1155TransferBatchIterator, error) {
|
||||||
|
|
||||||
|
var _operatorRule []interface{}
|
||||||
|
for _, _operatorItem := range _operator {
|
||||||
|
_operatorRule = append(_operatorRule, _operatorItem)
|
||||||
|
}
|
||||||
|
var _fromRule []interface{}
|
||||||
|
for _, _fromItem := range _from {
|
||||||
|
_fromRule = append(_fromRule, _fromItem)
|
||||||
|
}
|
||||||
|
var _toRule []interface{}
|
||||||
|
for _, _toItem := range _to {
|
||||||
|
_toRule = append(_toRule, _toItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.FilterLogs(opts, "TransferBatch", _operatorRule, _fromRule, _toRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155TransferBatchIterator{contract: _Ierc1155.contract, event: "TransferBatch", logs: logs, sub: sub}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// WatchTransferBatch is a free log subscription operation binding the contract event 0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb.
|
||||||
|
//
|
||||||
|
// Solidity: event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) WatchTransferBatch(opts *bind.WatchOpts, sink chan<- *Ierc1155TransferBatch, _operator []common.Address, _from []common.Address, _to []common.Address) (event.Subscription, error) {
|
||||||
|
|
||||||
|
var _operatorRule []interface{}
|
||||||
|
for _, _operatorItem := range _operator {
|
||||||
|
_operatorRule = append(_operatorRule, _operatorItem)
|
||||||
|
}
|
||||||
|
var _fromRule []interface{}
|
||||||
|
for _, _fromItem := range _from {
|
||||||
|
_fromRule = append(_fromRule, _fromItem)
|
||||||
|
}
|
||||||
|
var _toRule []interface{}
|
||||||
|
for _, _toItem := range _to {
|
||||||
|
_toRule = append(_toRule, _toItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.WatchLogs(opts, "TransferBatch", _operatorRule, _fromRule, _toRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return event.NewSubscription(func(quit <-chan struct{}) error {
|
||||||
|
defer sub.Unsubscribe()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case log := <-logs:
|
||||||
|
// New log arrived, parse the event and forward to the user
|
||||||
|
event := new(Ierc1155TransferBatch)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "TransferBatch", log); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
|
||||||
|
select {
|
||||||
|
case sink <- event:
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseTransferBatch is a log parse operation binding the contract event 0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb.
|
||||||
|
//
|
||||||
|
// Solidity: event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) ParseTransferBatch(log types.Log) (*Ierc1155TransferBatch, error) {
|
||||||
|
event := new(Ierc1155TransferBatch)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "TransferBatch", log); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
return event, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155TransferSingleIterator is returned from FilterTransferSingle and is used to iterate over the raw logs and unpacked data for TransferSingle events raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155TransferSingleIterator struct {
|
||||||
|
Event *Ierc1155TransferSingle // Event containing the contract specifics and raw log
|
||||||
|
|
||||||
|
contract *bind.BoundContract // Generic contract to use for unpacking event data
|
||||||
|
event string // Event name to use for unpacking event data
|
||||||
|
|
||||||
|
logs chan types.Log // Log channel receiving the found contract events
|
||||||
|
sub ethereum.Subscription // Subscription for errors, completion and termination
|
||||||
|
done bool // Whether the subscription completed delivering logs
|
||||||
|
fail error // Occurred error to stop iteration
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next advances the iterator to the subsequent event, returning whether there
|
||||||
|
// are any more events found. In case of a retrieval or parsing error, false is
|
||||||
|
// returned and Error() can be queried for the exact failure.
|
||||||
|
func (it *Ierc1155TransferSingleIterator) Next() bool {
|
||||||
|
// If the iterator failed, stop iterating
|
||||||
|
if it.fail != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// If the iterator completed, deliver directly whatever's available
|
||||||
|
if it.done {
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155TransferSingle)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Iterator still in progress, wait for either a data or an error event
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155TransferSingle)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
case err := <-it.sub.Err():
|
||||||
|
it.done = true
|
||||||
|
it.fail = err
|
||||||
|
return it.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns any retrieval or parsing error occurred during filtering.
|
||||||
|
func (it *Ierc1155TransferSingleIterator) Error() error {
|
||||||
|
return it.fail
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close terminates the iteration process, releasing any pending underlying
|
||||||
|
// resources.
|
||||||
|
func (it *Ierc1155TransferSingleIterator) Close() error {
|
||||||
|
it.sub.Unsubscribe()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155TransferSingle represents a TransferSingle event raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155TransferSingle struct {
|
||||||
|
Operator common.Address
|
||||||
|
From common.Address
|
||||||
|
To common.Address
|
||||||
|
Id *big.Int
|
||||||
|
Value *big.Int
|
||||||
|
Raw types.Log // Blockchain specific contextual infos
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterTransferSingle is a free log retrieval operation binding the contract event 0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62.
|
||||||
|
//
|
||||||
|
// Solidity: event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) FilterTransferSingle(opts *bind.FilterOpts, _operator []common.Address, _from []common.Address, _to []common.Address) (*Ierc1155TransferSingleIterator, error) {
|
||||||
|
|
||||||
|
var _operatorRule []interface{}
|
||||||
|
for _, _operatorItem := range _operator {
|
||||||
|
_operatorRule = append(_operatorRule, _operatorItem)
|
||||||
|
}
|
||||||
|
var _fromRule []interface{}
|
||||||
|
for _, _fromItem := range _from {
|
||||||
|
_fromRule = append(_fromRule, _fromItem)
|
||||||
|
}
|
||||||
|
var _toRule []interface{}
|
||||||
|
for _, _toItem := range _to {
|
||||||
|
_toRule = append(_toRule, _toItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.FilterLogs(opts, "TransferSingle", _operatorRule, _fromRule, _toRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155TransferSingleIterator{contract: _Ierc1155.contract, event: "TransferSingle", logs: logs, sub: sub}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// WatchTransferSingle is a free log subscription operation binding the contract event 0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62.
|
||||||
|
//
|
||||||
|
// Solidity: event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) WatchTransferSingle(opts *bind.WatchOpts, sink chan<- *Ierc1155TransferSingle, _operator []common.Address, _from []common.Address, _to []common.Address) (event.Subscription, error) {
|
||||||
|
|
||||||
|
var _operatorRule []interface{}
|
||||||
|
for _, _operatorItem := range _operator {
|
||||||
|
_operatorRule = append(_operatorRule, _operatorItem)
|
||||||
|
}
|
||||||
|
var _fromRule []interface{}
|
||||||
|
for _, _fromItem := range _from {
|
||||||
|
_fromRule = append(_fromRule, _fromItem)
|
||||||
|
}
|
||||||
|
var _toRule []interface{}
|
||||||
|
for _, _toItem := range _to {
|
||||||
|
_toRule = append(_toRule, _toItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.WatchLogs(opts, "TransferSingle", _operatorRule, _fromRule, _toRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return event.NewSubscription(func(quit <-chan struct{}) error {
|
||||||
|
defer sub.Unsubscribe()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case log := <-logs:
|
||||||
|
// New log arrived, parse the event and forward to the user
|
||||||
|
event := new(Ierc1155TransferSingle)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "TransferSingle", log); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
|
||||||
|
select {
|
||||||
|
case sink <- event:
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseTransferSingle is a log parse operation binding the contract event 0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62.
|
||||||
|
//
|
||||||
|
// Solidity: event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) ParseTransferSingle(log types.Log) (*Ierc1155TransferSingle, error) {
|
||||||
|
event := new(Ierc1155TransferSingle)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "TransferSingle", log); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
return event, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155URIIterator is returned from FilterURI and is used to iterate over the raw logs and unpacked data for URI events raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155URIIterator struct {
|
||||||
|
Event *Ierc1155URI // Event containing the contract specifics and raw log
|
||||||
|
|
||||||
|
contract *bind.BoundContract // Generic contract to use for unpacking event data
|
||||||
|
event string // Event name to use for unpacking event data
|
||||||
|
|
||||||
|
logs chan types.Log // Log channel receiving the found contract events
|
||||||
|
sub ethereum.Subscription // Subscription for errors, completion and termination
|
||||||
|
done bool // Whether the subscription completed delivering logs
|
||||||
|
fail error // Occurred error to stop iteration
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next advances the iterator to the subsequent event, returning whether there
|
||||||
|
// are any more events found. In case of a retrieval or parsing error, false is
|
||||||
|
// returned and Error() can be queried for the exact failure.
|
||||||
|
func (it *Ierc1155URIIterator) Next() bool {
|
||||||
|
// If the iterator failed, stop iterating
|
||||||
|
if it.fail != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// If the iterator completed, deliver directly whatever's available
|
||||||
|
if it.done {
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155URI)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Iterator still in progress, wait for either a data or an error event
|
||||||
|
select {
|
||||||
|
case log := <-it.logs:
|
||||||
|
it.Event = new(Ierc1155URI)
|
||||||
|
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
|
||||||
|
it.fail = err
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
it.Event.Raw = log
|
||||||
|
return true
|
||||||
|
|
||||||
|
case err := <-it.sub.Err():
|
||||||
|
it.done = true
|
||||||
|
it.fail = err
|
||||||
|
return it.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns any retrieval or parsing error occurred during filtering.
|
||||||
|
func (it *Ierc1155URIIterator) Error() error {
|
||||||
|
return it.fail
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close terminates the iteration process, releasing any pending underlying
|
||||||
|
// resources.
|
||||||
|
func (it *Ierc1155URIIterator) Close() error {
|
||||||
|
it.sub.Unsubscribe()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ierc1155URI represents a URI event raised by the Ierc1155 contract.
|
||||||
|
type Ierc1155URI struct {
|
||||||
|
Value string
|
||||||
|
Id *big.Int
|
||||||
|
Raw types.Log // Blockchain specific contextual infos
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterURI is a free log retrieval operation binding the contract event 0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b.
|
||||||
|
//
|
||||||
|
// Solidity: event URI(string _value, uint256 indexed _id)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) FilterURI(opts *bind.FilterOpts, _id []*big.Int) (*Ierc1155URIIterator, error) {
|
||||||
|
|
||||||
|
var _idRule []interface{}
|
||||||
|
for _, _idItem := range _id {
|
||||||
|
_idRule = append(_idRule, _idItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.FilterLogs(opts, "URI", _idRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Ierc1155URIIterator{contract: _Ierc1155.contract, event: "URI", logs: logs, sub: sub}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// WatchURI is a free log subscription operation binding the contract event 0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b.
|
||||||
|
//
|
||||||
|
// Solidity: event URI(string _value, uint256 indexed _id)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) WatchURI(opts *bind.WatchOpts, sink chan<- *Ierc1155URI, _id []*big.Int) (event.Subscription, error) {
|
||||||
|
|
||||||
|
var _idRule []interface{}
|
||||||
|
for _, _idItem := range _id {
|
||||||
|
_idRule = append(_idRule, _idItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
logs, sub, err := _Ierc1155.contract.WatchLogs(opts, "URI", _idRule)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return event.NewSubscription(func(quit <-chan struct{}) error {
|
||||||
|
defer sub.Unsubscribe()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case log := <-logs:
|
||||||
|
// New log arrived, parse the event and forward to the user
|
||||||
|
event := new(Ierc1155URI)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "URI", log); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
|
||||||
|
select {
|
||||||
|
case sink <- event:
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
case err := <-sub.Err():
|
||||||
|
return err
|
||||||
|
case <-quit:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseURI is a log parse operation binding the contract event 0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b.
|
||||||
|
//
|
||||||
|
// Solidity: event URI(string _value, uint256 indexed _id)
|
||||||
|
func (_Ierc1155 *Ierc1155Filterer) ParseURI(log types.Log) (*Ierc1155URI, error) {
|
||||||
|
event := new(Ierc1155URI)
|
||||||
|
if err := _Ierc1155.contract.UnpackLog(event, "URI", log); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
event.Raw = log
|
||||||
|
return event, nil
|
||||||
|
}
|
|
@ -0,0 +1,147 @@
|
||||||
|
pragma solidity ^0.5.16;
|
||||||
|
|
||||||
|
/**
|
||||||
|
@title ERC-1155 Multi Token Standard
|
||||||
|
@dev See https://eips.ethereum.org/EIPS/eip-1155
|
||||||
|
Note: The ERC-165 identifier for this interface is 0xd9b67a26.
|
||||||
|
*/
|
||||||
|
/* is ERC165 */ interface ERC1155 {
|
||||||
|
/**
|
||||||
|
@dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard).
|
||||||
|
The `_operator` argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender).
|
||||||
|
The `_from` argument MUST be the address of the holder whose balance is decreased.
|
||||||
|
The `_to` argument MUST be the address of the recipient whose balance is increased.
|
||||||
|
The `_id` argument MUST be the token type being transferred.
|
||||||
|
The `_value` argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by.
|
||||||
|
When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address).
|
||||||
|
When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address).
|
||||||
|
*/
|
||||||
|
event TransferSingle(
|
||||||
|
address indexed _operator,
|
||||||
|
address indexed _from,
|
||||||
|
address indexed _to,
|
||||||
|
uint256 _id,
|
||||||
|
uint256 _value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard).
|
||||||
|
The `_operator` argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender).
|
||||||
|
The `_from` argument MUST be the address of the holder whose balance is decreased.
|
||||||
|
The `_to` argument MUST be the address of the recipient whose balance is increased.
|
||||||
|
The `_ids` argument MUST be the list of tokens being transferred.
|
||||||
|
The `_values` argument MUST be the list of number of tokens (matching the list and order of tokens specified in _ids) the holder balance is decreased by and match what the recipient balance is increased by.
|
||||||
|
When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address).
|
||||||
|
When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address).
|
||||||
|
*/
|
||||||
|
event TransferBatch(
|
||||||
|
address indexed _operator,
|
||||||
|
address indexed _from,
|
||||||
|
address indexed _to,
|
||||||
|
uint256[] _ids,
|
||||||
|
uint256[] _values
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@dev MUST emit when approval for a second party/operator address to manage all tokens for an owner address is enabled or disabled (absence of an event assumes disabled).
|
||||||
|
*/
|
||||||
|
event ApprovalForAll(
|
||||||
|
address indexed _owner,
|
||||||
|
address indexed _operator,
|
||||||
|
bool _approved
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@dev MUST emit when the URI is updated for a token ID.
|
||||||
|
URIs are defined in RFC 3986.
|
||||||
|
The URI MUST point to a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema".
|
||||||
|
*/
|
||||||
|
event URI(string _value, uint256 indexed _id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
|
||||||
|
@dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
|
||||||
|
MUST revert if `_to` is the zero address.
|
||||||
|
MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
|
||||||
|
MUST revert on any other error.
|
||||||
|
MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
|
||||||
|
After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
|
||||||
|
@param _from Source address
|
||||||
|
@param _to Target address
|
||||||
|
@param _id ID of the token type
|
||||||
|
@param _value Transfer amount
|
||||||
|
@param _data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
|
||||||
|
*/
|
||||||
|
function safeTransferFrom(
|
||||||
|
address _from,
|
||||||
|
address _to,
|
||||||
|
uint256 _id,
|
||||||
|
uint256 _value,
|
||||||
|
bytes calldata _data
|
||||||
|
) external;
|
||||||
|
|
||||||
|
/**
|
||||||
|
@notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
|
||||||
|
@dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
|
||||||
|
MUST revert if `_to` is the zero address.
|
||||||
|
MUST revert if length of `_ids` is not the same as length of `_values`.
|
||||||
|
MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
|
||||||
|
MUST revert on any other error.
|
||||||
|
MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
|
||||||
|
Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
|
||||||
|
After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
|
||||||
|
@param _from Source address
|
||||||
|
@param _to Target address
|
||||||
|
@param _ids IDs of each token type (order and length must match _values array)
|
||||||
|
@param _values Transfer amounts per token type (order and length must match _ids array)
|
||||||
|
@param _data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
|
||||||
|
*/
|
||||||
|
function safeBatchTransferFrom(
|
||||||
|
address _from,
|
||||||
|
address _to,
|
||||||
|
uint256[] calldata _ids,
|
||||||
|
uint256[] calldata _values,
|
||||||
|
bytes calldata _data
|
||||||
|
) external;
|
||||||
|
|
||||||
|
/**
|
||||||
|
@notice Get the balance of an account's tokens.
|
||||||
|
@param _owner The address of the token holder
|
||||||
|
@param _id ID of the token
|
||||||
|
@return The _owner's balance of the token type requested
|
||||||
|
*/
|
||||||
|
function balanceOf(
|
||||||
|
address _owner,
|
||||||
|
uint256 _id
|
||||||
|
) external view returns (uint256);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@notice Get the balance of multiple account/token pairs
|
||||||
|
@param _owners The addresses of the token holders
|
||||||
|
@param _ids ID of the tokens
|
||||||
|
@return The _owner's balance of the token types requested (i.e. balance for each (owner, id) pair)
|
||||||
|
*/
|
||||||
|
function balanceOfBatch(
|
||||||
|
address[] calldata _owners,
|
||||||
|
uint256[] calldata _ids
|
||||||
|
) external view returns (uint256[] memory);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
|
||||||
|
@dev MUST emit the ApprovalForAll event on success.
|
||||||
|
@param _operator Address to add to the set of authorized operators
|
||||||
|
@param _approved True if the operator is approved, false to revoke approval
|
||||||
|
*/
|
||||||
|
function setApprovalForAll(address _operator, bool _approved) external;
|
||||||
|
|
||||||
|
/**
|
||||||
|
@notice Queries the approval status of an operator for a given owner.
|
||||||
|
@param _owner The owner of the tokens
|
||||||
|
@param _operator Address of authorized operator
|
||||||
|
@return True if the operator is approved, false if not
|
||||||
|
*/
|
||||||
|
function isApprovedForAll(
|
||||||
|
address _owner,
|
||||||
|
address _operator
|
||||||
|
) external view returns (bool);
|
||||||
|
}
|
|
@ -30,6 +30,7 @@ type TransactionBridge struct {
|
||||||
HopTx *HopTxArgs
|
HopTx *HopTxArgs
|
||||||
CbridgeTx *CBridgeTxArgs
|
CbridgeTx *CBridgeTxArgs
|
||||||
ERC721TransferTx *ERC721TransferTxArgs
|
ERC721TransferTx *ERC721TransferTxArgs
|
||||||
|
ERC1155TransferTx *ERC1155TransferTxArgs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TransactionBridge) Value() *big.Int {
|
func (t *TransactionBridge) Value() *big.Int {
|
||||||
|
@ -41,6 +42,8 @@ func (t *TransactionBridge) Value() *big.Int {
|
||||||
return t.CbridgeTx.Amount.ToInt()
|
return t.CbridgeTx.Amount.ToInt()
|
||||||
} else if t.ERC721TransferTx != nil {
|
} else if t.ERC721TransferTx != nil {
|
||||||
return big.NewInt(1)
|
return big.NewInt(1)
|
||||||
|
} else if t.ERC1155TransferTx != nil {
|
||||||
|
return t.ERC1155TransferTx.Amount.ToInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
return big.NewInt(0)
|
return big.NewInt(0)
|
||||||
|
@ -55,6 +58,8 @@ func (t *TransactionBridge) From() types.Address {
|
||||||
return t.CbridgeTx.From
|
return t.CbridgeTx.From
|
||||||
} else if t.ERC721TransferTx != nil {
|
} else if t.ERC721TransferTx != nil {
|
||||||
return t.ERC721TransferTx.From
|
return t.ERC721TransferTx.From
|
||||||
|
} else if t.ERC1155TransferTx != nil {
|
||||||
|
return t.ERC1155TransferTx.From
|
||||||
}
|
}
|
||||||
|
|
||||||
return types.HexToAddress("0x0")
|
return types.HexToAddress("0x0")
|
||||||
|
@ -69,6 +74,8 @@ func (t *TransactionBridge) To() types.Address {
|
||||||
return types.Address(t.HopTx.Recipient)
|
return types.Address(t.HopTx.Recipient)
|
||||||
} else if t.ERC721TransferTx != nil {
|
} else if t.ERC721TransferTx != nil {
|
||||||
return types.Address(t.ERC721TransferTx.Recipient)
|
return types.Address(t.ERC721TransferTx.Recipient)
|
||||||
|
} else if t.ERC1155TransferTx != nil {
|
||||||
|
return types.Address(t.ERC1155TransferTx.Recipient)
|
||||||
}
|
}
|
||||||
|
|
||||||
return types.HexToAddress("0x0")
|
return types.HexToAddress("0x0")
|
||||||
|
@ -83,6 +90,8 @@ func (t *TransactionBridge) Data() types.HexBytes {
|
||||||
return types.HexBytes("")
|
return types.HexBytes("")
|
||||||
} else if t.ERC721TransferTx != nil {
|
} else if t.ERC721TransferTx != nil {
|
||||||
return types.HexBytes("")
|
return types.HexBytes("")
|
||||||
|
} else if t.ERC1155TransferTx != nil {
|
||||||
|
return types.HexBytes("")
|
||||||
}
|
}
|
||||||
|
|
||||||
return types.HexBytes("")
|
return types.HexBytes("")
|
||||||
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
package bridge
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"math/big"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum"
|
||||||
|
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||||
|
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
|
ethTypes "github.com/ethereum/go-ethereum/core/types"
|
||||||
|
"github.com/status-im/status-go/account"
|
||||||
|
"github.com/status-im/status-go/contracts/community-tokens/collectibles"
|
||||||
|
"github.com/status-im/status-go/contracts/ierc1155"
|
||||||
|
"github.com/status-im/status-go/eth-node/types"
|
||||||
|
"github.com/status-im/status-go/params"
|
||||||
|
"github.com/status-im/status-go/rpc"
|
||||||
|
"github.com/status-im/status-go/services/wallet/token"
|
||||||
|
"github.com/status-im/status-go/transactions"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ERC1155TransferTxArgs struct {
|
||||||
|
transactions.SendTxArgs
|
||||||
|
TokenID *hexutil.Big `json:"tokenId"`
|
||||||
|
Recipient common.Address `json:"recipient"`
|
||||||
|
Amount *hexutil.Big `json:"amount"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ERC1155TransferBridge struct {
|
||||||
|
rpcClient *rpc.Client
|
||||||
|
transactor *transactions.Transactor
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewERC1155TransferBridge(rpcClient *rpc.Client, transactor *transactions.Transactor) *ERC1155TransferBridge {
|
||||||
|
return &ERC1155TransferBridge{rpcClient: rpcClient, transactor: transactor}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) Name() string {
|
||||||
|
return "ERC1155Transfer"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) Can(from, to *params.Network, token *token.Token, balance *big.Int) (bool, error) {
|
||||||
|
return from.ChainID == to.ChainID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) CalculateFees(from, to *params.Network, token *token.Token, amountIn *big.Int, nativeTokenPrice, tokenPrice float64, gasPrice *big.Float) (*big.Int, *big.Int, error) {
|
||||||
|
return big.NewInt(0), big.NewInt(0), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) EstimateGas(fromNetwork *params.Network, toNetwork *params.Network, from common.Address, to common.Address, token *token.Token, amountIn *big.Int) (uint64, error) {
|
||||||
|
ethClient, err := s.rpcClient.EthClient(fromNetwork.ChainID)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var input []byte
|
||||||
|
value := new(big.Int)
|
||||||
|
|
||||||
|
abi, err := abi.JSON(strings.NewReader(collectibles.CollectiblesMetaData.ABI))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
id, success := big.NewInt(0).SetString(token.Symbol, 0)
|
||||||
|
if !success {
|
||||||
|
return 0, fmt.Errorf("failed to convert %s to big.Int", token.Symbol)
|
||||||
|
}
|
||||||
|
input, err = abi.Pack("safeTransferFrom",
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
id,
|
||||||
|
amountIn,
|
||||||
|
[]byte{},
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
if code, err := ethClient.PendingCodeAt(ctx, token.Address); err != nil {
|
||||||
|
return 0, err
|
||||||
|
} else if len(code) == 0 {
|
||||||
|
return 0, bind.ErrNoCode
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := ethereum.CallMsg{
|
||||||
|
From: from,
|
||||||
|
To: &token.Address,
|
||||||
|
Value: value,
|
||||||
|
Data: input,
|
||||||
|
}
|
||||||
|
|
||||||
|
estimation, err := ethClient.EstimateGas(ctx, msg)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
increasedEstimation := float64(estimation) * IncreaseEstimatedGasFactor
|
||||||
|
return uint64(increasedEstimation), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) sendOrBuild(sendArgs *TransactionBridge, signerFn bind.SignerFn) (tx *ethTypes.Transaction, err error) {
|
||||||
|
ethClient, err := s.rpcClient.EthClient(sendArgs.ChainID)
|
||||||
|
if err != nil {
|
||||||
|
return tx, err
|
||||||
|
}
|
||||||
|
|
||||||
|
contract, err := ierc1155.NewIerc1155(common.Address(*sendArgs.ERC1155TransferTx.To), ethClient)
|
||||||
|
if err != nil {
|
||||||
|
return tx, err
|
||||||
|
}
|
||||||
|
|
||||||
|
nonce, err := s.transactor.NextNonce(s.rpcClient, sendArgs.ChainID, sendArgs.ERC1155TransferTx.From)
|
||||||
|
if err != nil {
|
||||||
|
return tx, err
|
||||||
|
}
|
||||||
|
|
||||||
|
argNonce := hexutil.Uint64(nonce)
|
||||||
|
sendArgs.ERC1155TransferTx.Nonce = &argNonce
|
||||||
|
txOpts := sendArgs.ERC1155TransferTx.ToTransactOpts(signerFn)
|
||||||
|
tx, err = contract.SafeTransferFrom(
|
||||||
|
txOpts, common.Address(sendArgs.ERC1155TransferTx.From),
|
||||||
|
sendArgs.ERC1155TransferTx.Recipient,
|
||||||
|
sendArgs.ERC1155TransferTx.TokenID.ToInt(),
|
||||||
|
sendArgs.ERC1155TransferTx.Amount.ToInt(),
|
||||||
|
[]byte{},
|
||||||
|
)
|
||||||
|
return tx, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) Send(sendArgs *TransactionBridge, verifiedAccount *account.SelectedExtKey) (hash types.Hash, err error) {
|
||||||
|
tx, err := s.sendOrBuild(sendArgs, getSigner(sendArgs.ChainID, sendArgs.ERC1155TransferTx.From, verifiedAccount))
|
||||||
|
if err != nil {
|
||||||
|
return hash, err
|
||||||
|
}
|
||||||
|
return types.Hash(tx.Hash()), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) BuildTransaction(sendArgs *TransactionBridge) (*ethTypes.Transaction, error) {
|
||||||
|
return s.sendOrBuild(sendArgs, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) CalculateAmountOut(from, to *params.Network, amountIn *big.Int, symbol string) (*big.Int, error) {
|
||||||
|
return amountIn, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ERC1155TransferBridge) GetContractAddress(network *params.Network, token *token.Token) *common.Address {
|
||||||
|
return &token.Address
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/status-im/status-go/contracts"
|
"github.com/status-im/status-go/contracts"
|
||||||
|
"github.com/status-im/status-go/contracts/ierc1155"
|
||||||
"github.com/status-im/status-go/contracts/ierc20"
|
"github.com/status-im/status-go/contracts/ierc20"
|
||||||
"github.com/status-im/status-go/eth-node/types"
|
"github.com/status-im/status-go/eth-node/types"
|
||||||
"github.com/status-im/status-go/params"
|
"github.com/status-im/status-go/params"
|
||||||
|
@ -31,6 +32,7 @@ import (
|
||||||
const EstimateUsername = "RandomUsername"
|
const EstimateUsername = "RandomUsername"
|
||||||
const EstimatePubKey = "0x04bb2024ce5d72e45d4a4f8589ae657ef9745855006996115a23a1af88d536cf02c0524a585fce7bfa79d6a9669af735eda6205d6c7e5b3cdc2b8ff7b2fa1f0b56"
|
const EstimatePubKey = "0x04bb2024ce5d72e45d4a4f8589ae657ef9745855006996115a23a1af88d536cf02c0524a585fce7bfa79d6a9669af735eda6205d6c7e5b3cdc2b8ff7b2fa1f0b56"
|
||||||
const ERC721TransferString = "ERC721Transfer"
|
const ERC721TransferString = "ERC721Transfer"
|
||||||
|
const ERC1155TransferString = "ERC1155Transfer"
|
||||||
|
|
||||||
type SendType int
|
type SendType int
|
||||||
|
|
||||||
|
@ -42,11 +44,16 @@ const (
|
||||||
StickersBuy
|
StickersBuy
|
||||||
Bridge
|
Bridge
|
||||||
ERC721Transfer
|
ERC721Transfer
|
||||||
|
ERC1155Transfer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (s SendType) IsCollectiblesTransfer() bool {
|
||||||
|
return s == ERC721Transfer || s == ERC1155Transfer
|
||||||
|
}
|
||||||
|
|
||||||
func (s SendType) FetchPrices(service *Service, tokenID string) (map[string]float64, error) {
|
func (s SendType) FetchPrices(service *Service, tokenID string) (map[string]float64, error) {
|
||||||
symbols := []string{tokenID, "ETH"}
|
symbols := []string{tokenID, "ETH"}
|
||||||
if s == ERC721Transfer {
|
if s.IsCollectiblesTransfer() {
|
||||||
symbols = []string{"ETH"}
|
symbols = []string{"ETH"}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,14 +65,14 @@ func (s SendType) FetchPrices(service *Service, tokenID string) (map[string]floa
|
||||||
for symbol, pricePerCurrency := range pricesMap {
|
for symbol, pricePerCurrency := range pricesMap {
|
||||||
prices[symbol] = pricePerCurrency["USD"]
|
prices[symbol] = pricePerCurrency["USD"]
|
||||||
}
|
}
|
||||||
if s == ERC721Transfer {
|
if s.IsCollectiblesTransfer() {
|
||||||
prices[tokenID] = 0
|
prices[tokenID] = 0
|
||||||
}
|
}
|
||||||
return prices, nil
|
return prices, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SendType) FindToken(service *Service, account common.Address, network *params.Network, tokenID string) *token.Token {
|
func (s SendType) FindToken(service *Service, account common.Address, network *params.Network, tokenID string) *token.Token {
|
||||||
if s != ERC721Transfer {
|
if !s.IsCollectiblesTransfer() {
|
||||||
return service.tokenManager.FindToken(network, tokenID)
|
return service.tokenManager.FindToken(network, tokenID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,11 +96,11 @@ func (s SendType) FindToken(service *Service, account common.Address, network *p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SendType) isTransfer() bool {
|
func (s SendType) isTransfer() bool {
|
||||||
return s == Transfer || s == ERC721Transfer
|
return s == Transfer || s.IsCollectiblesTransfer()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SendType) isAvailableBetween(from, to *params.Network) bool {
|
func (s SendType) isAvailableBetween(from, to *params.Network) bool {
|
||||||
if s == ERC721Transfer {
|
if s.IsCollectiblesTransfer() {
|
||||||
return from.ChainID == to.ChainID
|
return from.ChainID == to.ChainID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,11 +120,19 @@ func (s SendType) canUseBridge(b bridge.Bridge) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s == ERC1155Transfer && b.Name() != ERC1155TransferString {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if s != ERC1155Transfer && b.Name() == ERC1155TransferString {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SendType) isAvailableFor(network *params.Network) bool {
|
func (s SendType) isAvailableFor(network *params.Network) bool {
|
||||||
if s == Transfer || s == Bridge || s == ERC721Transfer {
|
if s == Transfer || s == Bridge || s.IsCollectiblesTransfer() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,12 +423,14 @@ func NewRouter(s *Service) *Router {
|
||||||
bridges := make(map[string]bridge.Bridge)
|
bridges := make(map[string]bridge.Bridge)
|
||||||
transfer := bridge.NewTransferBridge(s.rpcClient, s.transactor)
|
transfer := bridge.NewTransferBridge(s.rpcClient, s.transactor)
|
||||||
erc721Transfer := bridge.NewERC721TransferBridge(s.rpcClient, s.transactor)
|
erc721Transfer := bridge.NewERC721TransferBridge(s.rpcClient, s.transactor)
|
||||||
|
erc1155Transfer := bridge.NewERC1155TransferBridge(s.rpcClient, s.transactor)
|
||||||
cbridge := bridge.NewCbridge(s.rpcClient, s.transactor, s.tokenManager)
|
cbridge := bridge.NewCbridge(s.rpcClient, s.transactor, s.tokenManager)
|
||||||
hop := bridge.NewHopBridge(s.rpcClient, s.transactor, s.tokenManager)
|
hop := bridge.NewHopBridge(s.rpcClient, s.transactor, s.tokenManager)
|
||||||
bridges[transfer.Name()] = transfer
|
bridges[transfer.Name()] = transfer
|
||||||
bridges[erc721Transfer.Name()] = erc721Transfer
|
bridges[erc721Transfer.Name()] = erc721Transfer
|
||||||
bridges[hop.Name()] = hop
|
bridges[hop.Name()] = hop
|
||||||
bridges[cbridge.Name()] = cbridge
|
bridges[cbridge.Name()] = cbridge
|
||||||
|
bridges[erc1155Transfer.Name()] = erc1155Transfer
|
||||||
|
|
||||||
return &Router{s, bridges, s.rpcClient}
|
return &Router{s, bridges, s.rpcClient}
|
||||||
}
|
}
|
||||||
|
@ -507,6 +524,27 @@ func (r *Router) getBalance(ctx context.Context, network *params.Network, token
|
||||||
return r.s.tokenManager.GetBalance(ctx, client, account, token.Address)
|
return r.s.tokenManager.GetBalance(ctx, client, account, token.Address)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Router) getERC1155Balance(ctx context.Context, network *params.Network, token *token.Token, account common.Address) (*big.Int, error) {
|
||||||
|
client, err := r.s.rpcClient.EthClient(network.ChainID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
tokenID, success := new(big.Int).SetString(token.Symbol, 10)
|
||||||
|
if !success {
|
||||||
|
return nil, errors.New("failed to convert token symbol to big.Int")
|
||||||
|
}
|
||||||
|
|
||||||
|
caller, err := ierc1155.NewIerc1155Caller(token.Address, client)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return caller.BalanceOf(&bind.CallOpts{
|
||||||
|
Context: ctx,
|
||||||
|
}, account, tokenID)
|
||||||
|
}
|
||||||
|
|
||||||
func (r *Router) suggestedRoutes(
|
func (r *Router) suggestedRoutes(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
sendType SendType,
|
sendType SendType,
|
||||||
|
@ -572,7 +610,12 @@ func (r *Router) suggestedRoutes(
|
||||||
|
|
||||||
// Default value is 1 as in case of erc721 as we built the token we are sure the account owns it
|
// Default value is 1 as in case of erc721 as we built the token we are sure the account owns it
|
||||||
balance := big.NewInt(1)
|
balance := big.NewInt(1)
|
||||||
if sendType != ERC721Transfer {
|
if sendType == ERC1155Transfer {
|
||||||
|
balance, err = r.getERC1155Balance(ctx, network, token, addrFrom)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else if sendType != ERC721Transfer {
|
||||||
balance, err = r.getBalance(ctx, network, token, addrFrom)
|
balance, err = r.getBalance(ctx, network, token, addrFrom)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue