-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathorc20_mintable.go
53 lines (45 loc) · 2 KB
/
orc20_mintable.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package ethcli
import (
"errors"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"math/big"
"strings"
)
var openzeppelinERC20MintBurnAbleAbi = `[{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]`
func (cli *ETHCli) ORC20Mint(token, key, to, value string) (string, error) {
ins, err := abi.JSON(strings.NewReader(openzeppelinERC20MintBurnAbleAbi))
if err != nil {
return "", err
}
amount, ok := new(big.Int).SetString(value, 10)
if !ok {
return "", errors.New("invalid value:" + value)
}
data, _ := ins.Pack("mint", common.HexToAddress(to), amount)
return cli.SendMondoTx(key, &token, "0", BytesToHex(data), "0", 0)
}
func (cli *ETHCli) ORC20Burn(token, key, value string) (string, error) {
ins, err := abi.JSON(strings.NewReader(openzeppelinERC20MintBurnAbleAbi))
if err != nil {
return "", err
}
amount, ok := new(big.Int).SetString(value, 10)
if !ok {
return "", errors.New("invalid value:" + value)
}
data, _ := ins.Pack("burn", amount)
return cli.SendMondoTx(key, &token, "0", BytesToHex(data), "0", 0)
}
func (cli *ETHCli) ORC20BurnFrom(token, key, owner, value string) (string, error) {
ins, err := abi.JSON(strings.NewReader(openzeppelinERC20MintBurnAbleAbi))
if err != nil {
return "", err
}
amount, ok := new(big.Int).SetString(value, 10)
if !ok {
return "", errors.New("invalid value:" + value)
}
data, _ := ins.Pack("burnFrom", common.HexToAddress(owner), amount)
return cli.SendMondoTx(key, &token, "0", BytesToHex(data), "0", 0)
}