Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 62 additions & 22 deletions app/precompiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,68 +3,108 @@ package app
import (
putils "github.com/sei-protocol/sei-chain/precompiles/utils"
"github.com/sei-protocol/sei-chain/sei-cosmos/client"
"github.com/sei-protocol/sei-chain/sei-cosmos/codec"
bankkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/keeper"
govkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/gov/keeper"
stakingkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/keeper"
wasmkeeper "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm/keeper"
mintkeeper "github.com/sei-protocol/sei-chain/x/mint/keeper"
)

type PrecompileKeepers struct {
putils.BankKeeper
putils.BankMsgServer
putils.BankQuerier
putils.EVMKeeper
putils.AccountKeeper
putils.AuthQuerier
putils.AuthzQuerier
putils.OracleKeeper
putils.WasmdKeeper
putils.WasmdViewKeeper
putils.StakingKeeper
putils.StakingQuerier
putils.GovKeeper
putils.GovMsgServer
putils.GovQuerier
putils.DistributionKeeper
putils.DistributionQuerier
putils.EvidenceQuerier
putils.FeegrantQuerier
putils.MintQuerier
putils.ParamsQuerier
putils.SlashingQuerier
putils.UpgradeQuerier
putils.TransferKeeper
putils.ClientKeeper
putils.ConnectionKeeper
putils.ChannelKeeper
txConf client.TxConfig
cdc codec.Codec
}

func NewPrecompileKeepers(a *App) *PrecompileKeepers {
return &PrecompileKeepers{
BankKeeper: a.BankKeeper,
BankMsgServer: bankkeeper.NewMsgServerImpl(a.BankKeeper),
EVMKeeper: &a.EvmKeeper,
AccountKeeper: a.AccountKeeper,
OracleKeeper: a.OracleKeeper,
WasmdKeeper: wasmkeeper.NewDefaultPermissionKeeper(a.WasmKeeper),
WasmdViewKeeper: a.WasmKeeper,
StakingKeeper: stakingkeeper.NewMsgServerImpl(a.StakingKeeper),
StakingQuerier: stakingkeeper.Querier{Keeper: a.StakingKeeper},
GovKeeper: a.GovKeeper,
GovMsgServer: govkeeper.NewMsgServerImpl(a.GovKeeper),
DistributionKeeper: a.DistrKeeper,
TransferKeeper: a.TransferKeeper,
ClientKeeper: a.IBCKeeper.ClientKeeper,
ConnectionKeeper: a.IBCKeeper.ConnectionKeeper,
ChannelKeeper: a.IBCKeeper.ChannelKeeper,
txConf: a.GetTxConfig(),
BankKeeper: a.BankKeeper,
BankMsgServer: bankkeeper.NewMsgServerImpl(a.BankKeeper),
BankQuerier: a.BankKeeper,
EVMKeeper: &a.EvmKeeper,
AccountKeeper: a.AccountKeeper,
AuthQuerier: a.AccountKeeper,
AuthzQuerier: a.AuthzKeeper,
OracleKeeper: a.OracleKeeper,
WasmdKeeper: wasmkeeper.NewDefaultPermissionKeeper(a.WasmKeeper),
WasmdViewKeeper: a.WasmKeeper,
StakingKeeper: stakingkeeper.NewMsgServerImpl(a.StakingKeeper),
StakingQuerier: stakingkeeper.Querier{Keeper: a.StakingKeeper},
GovKeeper: a.GovKeeper,
GovMsgServer: govkeeper.NewMsgServerImpl(a.GovKeeper),
GovQuerier: a.GovKeeper,
DistributionKeeper: a.DistrKeeper,
DistributionQuerier: a.DistrKeeper,
EvidenceQuerier: a.EvidenceKeeper,
FeegrantQuerier: a.FeeGrantKeeper,
MintQuerier: mintkeeper.NewQuerier(a.MintKeeper),
ParamsQuerier: a.ParamsKeeper,
SlashingQuerier: a.SlashingKeeper,
UpgradeQuerier: a.UpgradeKeeper,
TransferKeeper: a.TransferKeeper,
ClientKeeper: a.IBCKeeper.ClientKeeper,
ConnectionKeeper: a.IBCKeeper.ConnectionKeeper,
ChannelKeeper: a.IBCKeeper.ChannelKeeper,
txConf: a.GetTxConfig(),
cdc: a.appCodec,
}
}

func (pk *PrecompileKeepers) BankK() putils.BankKeeper { return pk.BankKeeper }
func (pk *PrecompileKeepers) BankMS() putils.BankMsgServer { return pk.BankMsgServer }
func (pk *PrecompileKeepers) BankQ() putils.BankQuerier { return pk.BankQuerier }
func (pk *PrecompileKeepers) EVMK() putils.EVMKeeper { return pk.EVMKeeper }
func (pk *PrecompileKeepers) AccountK() putils.AccountKeeper { return pk.AccountKeeper }
func (pk *PrecompileKeepers) AuthQ() putils.AuthQuerier { return pk.AuthQuerier }
func (pk *PrecompileKeepers) AuthzQ() putils.AuthzQuerier { return pk.AuthzQuerier }
func (pk *PrecompileKeepers) OracleK() putils.OracleKeeper { return pk.OracleKeeper }
func (pk *PrecompileKeepers) WasmdK() putils.WasmdKeeper { return pk.WasmdKeeper }
func (pk *PrecompileKeepers) WasmdVK() putils.WasmdViewKeeper { return pk.WasmdViewKeeper }
func (pk *PrecompileKeepers) StakingK() putils.StakingKeeper { return pk.StakingKeeper }
func (pk *PrecompileKeepers) StakingQ() putils.StakingQuerier { return pk.StakingQuerier }
func (pk *PrecompileKeepers) GovK() putils.GovKeeper { return pk.GovKeeper }
func (pk *PrecompileKeepers) GovMS() putils.GovMsgServer { return pk.GovMsgServer }
func (pk *PrecompileKeepers) GovQ() putils.GovQuerier { return pk.GovQuerier }
func (pk *PrecompileKeepers) DistributionK() putils.DistributionKeeper { return pk.DistributionKeeper }
func (pk *PrecompileKeepers) TransferK() putils.TransferKeeper { return pk.TransferKeeper }
func (pk *PrecompileKeepers) ClientK() putils.ClientKeeper { return pk.ClientKeeper }
func (pk *PrecompileKeepers) ConnectionK() putils.ConnectionKeeper { return pk.ConnectionKeeper }
func (pk *PrecompileKeepers) ChannelK() putils.ChannelKeeper { return pk.ChannelKeeper }
func (pk *PrecompileKeepers) TxConfig() client.TxConfig { return pk.txConf }
func (pk *PrecompileKeepers) DistributionQ() putils.DistributionQuerier {
return pk.DistributionQuerier
}
func (pk *PrecompileKeepers) EvidenceQ() putils.EvidenceQuerier { return pk.EvidenceQuerier }
func (pk *PrecompileKeepers) FeegrantQ() putils.FeegrantQuerier { return pk.FeegrantQuerier }
func (pk *PrecompileKeepers) MintQ() putils.MintQuerier { return pk.MintQuerier }
func (pk *PrecompileKeepers) ParamsQ() putils.ParamsQuerier { return pk.ParamsQuerier }
func (pk *PrecompileKeepers) SlashingQ() putils.SlashingQuerier { return pk.SlashingQuerier }
func (pk *PrecompileKeepers) UpgradeQ() putils.UpgradeQuerier { return pk.UpgradeQuerier }
func (pk *PrecompileKeepers) TransferK() putils.TransferKeeper { return pk.TransferKeeper }
func (pk *PrecompileKeepers) ClientK() putils.ClientKeeper { return pk.ClientKeeper }
func (pk *PrecompileKeepers) ConnectionK() putils.ConnectionKeeper { return pk.ConnectionKeeper }
func (pk *PrecompileKeepers) ChannelK() putils.ChannelKeeper { return pk.ChannelKeeper }
func (pk *PrecompileKeepers) TxConfig() client.TxConfig { return pk.txConf }
func (pk *PrecompileKeepers) Codec() codec.Codec { return pk.cdc }
16 changes: 16 additions & 0 deletions giga/executor/precompiles/failfast.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,25 @@ import (
"github.com/ethereum/go-ethereum/core/tracing"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/sei-protocol/sei-chain/precompiles/addr"
"github.com/sei-protocol/sei-chain/precompiles/auth"
"github.com/sei-protocol/sei-chain/precompiles/authz"
"github.com/sei-protocol/sei-chain/precompiles/bank"
"github.com/sei-protocol/sei-chain/precompiles/distribution"
"github.com/sei-protocol/sei-chain/precompiles/evidence"
"github.com/sei-protocol/sei-chain/precompiles/feegrant"
"github.com/sei-protocol/sei-chain/precompiles/gov"
"github.com/sei-protocol/sei-chain/precompiles/ibc"
"github.com/sei-protocol/sei-chain/precompiles/json"
"github.com/sei-protocol/sei-chain/precompiles/mint"
"github.com/sei-protocol/sei-chain/precompiles/oracle"
"github.com/sei-protocol/sei-chain/precompiles/p256"
"github.com/sei-protocol/sei-chain/precompiles/params"
"github.com/sei-protocol/sei-chain/precompiles/pointer"
"github.com/sei-protocol/sei-chain/precompiles/pointerview"
"github.com/sei-protocol/sei-chain/precompiles/slashing"
"github.com/sei-protocol/sei-chain/precompiles/solo"
"github.com/sei-protocol/sei-chain/precompiles/staking"
"github.com/sei-protocol/sei-chain/precompiles/upgrade"
"github.com/sei-protocol/sei-chain/precompiles/wasmd"
)

Expand All @@ -35,6 +43,14 @@ var FailFastPrecompileAddresses = []common.Address{
common.HexToAddress(pointer.PointerAddress),
common.HexToAddress(solo.SoloAddress),
common.HexToAddress(p256.P256VerifyAddress),
common.HexToAddress(auth.AuthAddress),
common.HexToAddress(authz.AuthzAddress),
common.HexToAddress(evidence.EvidenceAddress),
common.HexToAddress(feegrant.FeegrantAddress),
common.HexToAddress(mint.MintAddress),
common.HexToAddress(params.ParamsAddress),
common.HexToAddress(slashing.SlashingAddress),
common.HexToAddress(upgrade.UpgradeAddress),
}

// InvalidPrecompileCallError is an error type that implements vm.AbortError,
Expand Down
62 changes: 62 additions & 0 deletions precompiles/auth/Auth.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

address constant AUTH_PRECOMPILE_ADDRESS = 0x000000000000000000000000000000000000100D;

IAuth constant AUTH_CONTRACT = IAuth(AUTH_PRECOMPILE_ADDRESS);

interface IAuth {
// Queries

/**
* @notice Get account information for the given address
* @param addr The EVM address (must be associated with a Sei address)
* @return account Account details
*/
function account(
address addr
) external view returns (Account memory account);

/**
* @notice Get all accounts, paginated
* @param pageKey Pagination key (empty bytes for the first page)
* @return response Accounts response with pagination
*/
function accounts(
bytes memory pageKey
) external view returns (AccountsResponse memory response);

/**
* @notice Get the auth module parameters
* @return params Auth module parameters
*/
function params() external view returns (AuthParams memory params);

/**
* @notice Get the next account number
* @return count The next account number
*/
function nextAccountNumber() external view returns (uint64 count);

// Structs

struct Account {
string accountAddress;
uint64 accountNumber;
uint64 sequence;
}

struct AccountsResponse {
Account[] accounts;
bytes nextKey;
}

struct AuthParams {
uint64 maxMemoCharacters;
uint64 txSigLimit;
uint64 txSizeCostPerByte;
uint64 sigVerifyCostEd25519;
uint64 sigVerifyCostSecp256k1;
bool disableSeqnoCheck;
}
}
1 change: 1 addition & 0 deletions precompiles/auth/abi.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"account","outputs":[{"components":[{"internalType":"string","name":"accountAddress","type":"string"},{"internalType":"uint64","name":"accountNumber","type":"uint64"},{"internalType":"uint64","name":"sequence","type":"uint64"}],"internalType":"struct IAuth.Account","name":"account","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"pageKey","type":"bytes"}],"name":"accounts","outputs":[{"components":[{"components":[{"internalType":"string","name":"accountAddress","type":"string"},{"internalType":"uint64","name":"accountNumber","type":"uint64"},{"internalType":"uint64","name":"sequence","type":"uint64"}],"internalType":"struct IAuth.Account[]","name":"accounts","type":"tuple[]"},{"internalType":"bytes","name":"nextKey","type":"bytes"}],"internalType":"struct IAuth.AccountsResponse","name":"response","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAccountNumber","outputs":[{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"params","outputs":[{"components":[{"internalType":"uint64","name":"maxMemoCharacters","type":"uint64"},{"internalType":"uint64","name":"txSigLimit","type":"uint64"},{"internalType":"uint64","name":"txSizeCostPerByte","type":"uint64"},{"internalType":"uint64","name":"sigVerifyCostEd25519","type":"uint64"},{"internalType":"uint64","name":"sigVerifyCostSecp256k1","type":"uint64"},{"internalType":"bool","name":"disableSeqnoCheck","type":"bool"}],"internalType":"struct IAuth.AuthParams","name":"params","type":"tuple"}],"stateMutability":"view","type":"function"}]
Loading
Loading