Skip to content

Commit b7101cc

Browse files
committed
Add back legacy precompile versions
1 parent 620c03b commit b7101cc

File tree

157 files changed

+22407
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+22407
-0
lines changed

precompiles/addr/legacy/v520/abi.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"inputs":[{"internalType":"string","name":"addr","type":"string"}],"name":"getEvmAddr","outputs":[{"internalType":"address","name":"response","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getSeiAddr","outputs":[{"internalType":"string","name":"response","type":"string"}],"stateMutability":"view","type":"function"}]

precompiles/addr/legacy/v520/addr.go

+149
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package v520
2+
3+
import (
4+
"bytes"
5+
"embed"
6+
"fmt"
7+
"math/big"
8+
9+
sdk "github.com/cosmos/cosmos-sdk/types"
10+
11+
"github.com/ethereum/go-ethereum/accounts/abi"
12+
"github.com/ethereum/go-ethereum/common"
13+
"github.com/ethereum/go-ethereum/core/vm"
14+
pcommon "github.com/sei-protocol/sei-chain/precompiles/common/legacy/v520"
15+
)
16+
17+
const (
18+
GetSeiAddressMethod = "getSeiAddr"
19+
GetEvmAddressMethod = "getEvmAddr"
20+
)
21+
22+
const (
23+
AddrAddress = "0x0000000000000000000000000000000000001004"
24+
)
25+
26+
var _ vm.PrecompiledContract = &Precompile{}
27+
28+
// Embed abi json file to the executable binary. Needed when importing as dependency.
29+
//
30+
//go:embed abi.json
31+
var f embed.FS
32+
33+
type Precompile struct {
34+
pcommon.Precompile
35+
evmKeeper pcommon.EVMKeeper
36+
address common.Address
37+
38+
GetSeiAddressID []byte
39+
GetEvmAddressID []byte
40+
}
41+
42+
func NewPrecompile(evmKeeper pcommon.EVMKeeper) (*Precompile, error) {
43+
abiBz, err := f.ReadFile("abi.json")
44+
if err != nil {
45+
return nil, fmt.Errorf("error loading the staking ABI %s", err)
46+
}
47+
48+
newAbi, err := abi.JSON(bytes.NewReader(abiBz))
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
p := &Precompile{
54+
Precompile: pcommon.Precompile{ABI: newAbi},
55+
evmKeeper: evmKeeper,
56+
address: common.HexToAddress(AddrAddress),
57+
}
58+
59+
for name, m := range newAbi.Methods {
60+
switch name {
61+
case GetSeiAddressMethod:
62+
p.GetSeiAddressID = m.ID
63+
case GetEvmAddressMethod:
64+
p.GetEvmAddressID = m.ID
65+
}
66+
}
67+
68+
return p, nil
69+
}
70+
71+
// RequiredGas returns the required bare minimum gas to execute the precompile.
72+
func (p Precompile) RequiredGas(input []byte) uint64 {
73+
methodID, err := pcommon.ExtractMethodID(input)
74+
if err != nil {
75+
return pcommon.UnknownMethodCallGas
76+
}
77+
78+
method, err := p.ABI.MethodById(methodID)
79+
if err != nil {
80+
// This should never happen since this method is going to fail during Run
81+
return pcommon.UnknownMethodCallGas
82+
}
83+
84+
return p.Precompile.RequiredGas(input, p.IsTransaction(method.Name))
85+
}
86+
87+
func (p Precompile) Address() common.Address {
88+
return p.address
89+
}
90+
91+
func (p Precompile) GetName() string {
92+
return "addr"
93+
}
94+
95+
func (p Precompile) Run(evm *vm.EVM, _ common.Address, _ common.Address, input []byte, value *big.Int, _ bool, _ bool) (bz []byte, err error) {
96+
ctx, method, args, err := p.Prepare(evm, input)
97+
if err != nil {
98+
return nil, err
99+
}
100+
101+
switch method.Name {
102+
case GetSeiAddressMethod:
103+
return p.getSeiAddr(ctx, method, args, value)
104+
case GetEvmAddressMethod:
105+
return p.getEvmAddr(ctx, method, args, value)
106+
}
107+
return
108+
}
109+
110+
func (p Precompile) getSeiAddr(ctx sdk.Context, method *abi.Method, args []interface{}, value *big.Int) ([]byte, error) {
111+
if err := pcommon.ValidateNonPayable(value); err != nil {
112+
return nil, err
113+
}
114+
115+
if err := pcommon.ValidateArgsLength(args, 1); err != nil {
116+
return nil, err
117+
}
118+
119+
seiAddr, found := p.evmKeeper.GetSeiAddress(ctx, args[0].(common.Address))
120+
if !found {
121+
return nil, fmt.Errorf("EVM address %s is not associated", args[0].(common.Address).Hex())
122+
}
123+
return method.Outputs.Pack(seiAddr.String())
124+
}
125+
126+
func (p Precompile) getEvmAddr(ctx sdk.Context, method *abi.Method, args []interface{}, value *big.Int) ([]byte, error) {
127+
if err := pcommon.ValidateNonPayable(value); err != nil {
128+
return nil, err
129+
}
130+
131+
if err := pcommon.ValidateArgsLength(args, 1); err != nil {
132+
return nil, err
133+
}
134+
135+
seiAddr, err := sdk.AccAddressFromBech32(args[0].(string))
136+
if err != nil {
137+
return nil, err
138+
}
139+
140+
evmAddr, found := p.evmKeeper.GetEVMAddress(ctx, seiAddr)
141+
if !found {
142+
return nil, fmt.Errorf("sei address %s is not associated", args[0].(string))
143+
}
144+
return method.Outputs.Pack(evmAddr)
145+
}
146+
147+
func (Precompile) IsTransaction(string) bool {
148+
return false
149+
}

precompiles/addr/legacy/v555/abi.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"inputs":[{"internalType":"string","name":"addr","type":"string"}],"name":"getEvmAddr","outputs":[{"internalType":"address","name":"response","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getSeiAddr","outputs":[{"internalType":"string","name":"response","type":"string"}],"stateMutability":"view","type":"function"}]

precompiles/addr/legacy/v555/addr.go

+155
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package v555
2+
3+
import (
4+
"bytes"
5+
"embed"
6+
"fmt"
7+
"math/big"
8+
9+
sdk "github.com/cosmos/cosmos-sdk/types"
10+
11+
"github.com/ethereum/go-ethereum/accounts/abi"
12+
"github.com/ethereum/go-ethereum/common"
13+
"github.com/ethereum/go-ethereum/core/vm"
14+
pcommon "github.com/sei-protocol/sei-chain/precompiles/common/legacy/v555"
15+
"github.com/sei-protocol/sei-chain/x/evm/state"
16+
)
17+
18+
const (
19+
GetSeiAddressMethod = "getSeiAddr"
20+
GetEvmAddressMethod = "getEvmAddr"
21+
)
22+
23+
const (
24+
AddrAddress = "0x0000000000000000000000000000000000001004"
25+
)
26+
27+
var _ vm.PrecompiledContract = &Precompile{}
28+
29+
// Embed abi json file to the executable binary. Needed when importing as dependency.
30+
//
31+
//go:embed abi.json
32+
var f embed.FS
33+
34+
type Precompile struct {
35+
pcommon.Precompile
36+
evmKeeper pcommon.EVMKeeper
37+
address common.Address
38+
39+
GetSeiAddressID []byte
40+
GetEvmAddressID []byte
41+
}
42+
43+
func NewPrecompile(evmKeeper pcommon.EVMKeeper) (*Precompile, error) {
44+
abiBz, err := f.ReadFile("abi.json")
45+
if err != nil {
46+
return nil, fmt.Errorf("error loading the staking ABI %s", err)
47+
}
48+
49+
newAbi, err := abi.JSON(bytes.NewReader(abiBz))
50+
if err != nil {
51+
return nil, err
52+
}
53+
54+
p := &Precompile{
55+
Precompile: pcommon.Precompile{ABI: newAbi},
56+
evmKeeper: evmKeeper,
57+
address: common.HexToAddress(AddrAddress),
58+
}
59+
60+
for name, m := range newAbi.Methods {
61+
switch name {
62+
case GetSeiAddressMethod:
63+
p.GetSeiAddressID = m.ID
64+
case GetEvmAddressMethod:
65+
p.GetEvmAddressID = m.ID
66+
}
67+
}
68+
69+
return p, nil
70+
}
71+
72+
// RequiredGas returns the required bare minimum gas to execute the precompile.
73+
func (p Precompile) RequiredGas(input []byte) uint64 {
74+
methodID, err := pcommon.ExtractMethodID(input)
75+
if err != nil {
76+
return pcommon.UnknownMethodCallGas
77+
}
78+
79+
method, err := p.ABI.MethodById(methodID)
80+
if err != nil {
81+
// This should never happen since this method is going to fail during Run
82+
return pcommon.UnknownMethodCallGas
83+
}
84+
85+
return p.Precompile.RequiredGas(input, p.IsTransaction(method.Name))
86+
}
87+
88+
func (p Precompile) Address() common.Address {
89+
return p.address
90+
}
91+
92+
func (p Precompile) GetName() string {
93+
return "addr"
94+
}
95+
96+
func (p Precompile) Run(evm *vm.EVM, _ common.Address, _ common.Address, input []byte, value *big.Int, _ bool, _ bool) (bz []byte, err error) {
97+
defer func() {
98+
if err != nil {
99+
evm.StateDB.(*state.DBImpl).SetPrecompileError(err)
100+
}
101+
}()
102+
ctx, method, args, err := p.Prepare(evm, input)
103+
if err != nil {
104+
return nil, err
105+
}
106+
107+
switch method.Name {
108+
case GetSeiAddressMethod:
109+
return p.getSeiAddr(ctx, method, args, value)
110+
case GetEvmAddressMethod:
111+
return p.getEvmAddr(ctx, method, args, value)
112+
}
113+
return
114+
}
115+
116+
func (p Precompile) getSeiAddr(ctx sdk.Context, method *abi.Method, args []interface{}, value *big.Int) ([]byte, error) {
117+
if err := pcommon.ValidateNonPayable(value); err != nil {
118+
return nil, err
119+
}
120+
121+
if err := pcommon.ValidateArgsLength(args, 1); err != nil {
122+
return nil, err
123+
}
124+
125+
seiAddr, found := p.evmKeeper.GetSeiAddress(ctx, args[0].(common.Address))
126+
if !found {
127+
return nil, fmt.Errorf("EVM address %s is not associated", args[0].(common.Address).Hex())
128+
}
129+
return method.Outputs.Pack(seiAddr.String())
130+
}
131+
132+
func (p Precompile) getEvmAddr(ctx sdk.Context, method *abi.Method, args []interface{}, value *big.Int) ([]byte, error) {
133+
if err := pcommon.ValidateNonPayable(value); err != nil {
134+
return nil, err
135+
}
136+
137+
if err := pcommon.ValidateArgsLength(args, 1); err != nil {
138+
return nil, err
139+
}
140+
141+
seiAddr, err := sdk.AccAddressFromBech32(args[0].(string))
142+
if err != nil {
143+
return nil, err
144+
}
145+
146+
evmAddr, found := p.evmKeeper.GetEVMAddress(ctx, seiAddr)
147+
if !found {
148+
return nil, fmt.Errorf("sei address %s is not associated", args[0].(string))
149+
}
150+
return method.Outputs.Pack(evmAddr)
151+
}
152+
153+
func (Precompile) IsTransaction(string) bool {
154+
return false
155+
}

precompiles/addr/legacy/v562/abi.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"inputs":[{"internalType":"string","name":"addr","type":"string"}],"name":"getEvmAddr","outputs":[{"internalType":"address","name":"response","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getSeiAddr","outputs":[{"internalType":"string","name":"response","type":"string"}],"stateMutability":"view","type":"function"}]

0 commit comments

Comments
 (0)