Skip to content

Commit

Permalink
feat: added associated address getter solidity interface
Browse files Browse the repository at this point in the history
  • Loading branch information
psy2848048 committed Feb 24, 2025
1 parent 1ce188a commit 2187c34
Show file tree
Hide file tree
Showing 7 changed files with 348 additions and 11 deletions.
237 changes: 236 additions & 1 deletion precompile/wasm/IWasm.abi
Original file line number Diff line number Diff line change
@@ -1 +1,236 @@
[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bytes","name":"msg","type":"bytes"},{"internalType":"string","name":"denom","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"executeContract","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"uint256","name":"codeId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"msg","type":"bytes"},{"internalType":"string","name":"denom","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"instantiateContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"uint256","name":"codeId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"msg","type":"bytes"},{"internalType":"string","name":"denom","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"salt","type":"bytes"},{"internalType":"bool","name":"fixMsg","type":"bool"}],"name":"instantiateContract2","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"codeId","type":"uint256"},{"internalType":"bytes","name":"msg","type":"bytes"}],"name":"migrateContract","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bytes","name":"queryData","type":"bytes"}],"name":"smartContractState","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"}]
[
{
"inputs": [
{
"internalType": "address",
"name": "evmAddress",
"type": "address"
}
],
"name": "associatedAddress",
"outputs": [
{
"internalType": "bytes",
"name": "addr",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
},
{
"internalType": "bytes",
"name": "message",
"type": "bytes"
},
{
"internalType": "string",
"name": "denom",
"type": "string"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "executeContract",
"outputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "admin",
"type": "address"
},
{
"internalType": "uint256",
"name": "codeId",
"type": "uint256"
},
{
"internalType": "string",
"name": "label",
"type": "string"
},
{
"internalType": "bytes",
"name": "message",
"type": "bytes"
},
{
"internalType": "string",
"name": "denom",
"type": "string"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "instantiateContract",
"outputs": [
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "admin",
"type": "address"
},
{
"internalType": "uint256",
"name": "codeId",
"type": "uint256"
},
{
"internalType": "string",
"name": "label",
"type": "string"
},
{
"internalType": "bytes",
"name": "message",
"type": "bytes"
},
{
"internalType": "string",
"name": "denom",
"type": "string"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "salt",
"type": "bytes"
},
{
"internalType": "bool",
"name": "fixMsg",
"type": "bool"
}
],
"name": "instantiateContract2",
"outputs": [
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "codeId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "message",
"type": "bytes"
}
],
"name": "migrateContract",
"outputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
},
{
"internalType": "bytes",
"name": "queryData",
"type": "bytes"
}
],
"name": "smartContractState",
"outputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
}
]
9 changes: 5 additions & 4 deletions precompile/wasm/IWasm.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ interface IWasm {
address admin,
uint256 codeId,
string calldata label,
bytes calldata msg,
bytes calldata message,
string calldata denom,
uint256 amount
) external returns (address contractAddress, bytes calldata data);
Expand All @@ -23,7 +23,7 @@ interface IWasm {
address admin,
uint256 codeId,
string calldata label,
bytes calldata msg,
bytes calldata message,
string calldata denom,
uint256 amount,
bytes calldata salt,
Expand All @@ -32,20 +32,21 @@ interface IWasm {
function executeContract(
address sender,
address contractAddress,
bytes calldata msg,
bytes calldata message,
string calldata denom,
uint256 amount
) external returns (bytes calldata data);
function migrateContract(
address sender,
address contractAddress,
uint256 codeId,
bytes calldata msg
bytes calldata message
) external returns (bytes calldata data);

// Queries
function smartContractState(
address contractAddress,
bytes calldata queryData
) external view returns (bytes calldata data);
function associatedAddress(address evmAddress) external view returns (bytes calldata addr);
}
1 change: 1 addition & 0 deletions precompile/wasm/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ const (
MigrateContract MethodWasm = "migrateContract"

SmartContractState MethodWasm = "smartContractState"
AssociatedAddress MethodWasm = "associatedAddress"
)
1 change: 1 addition & 0 deletions precompile/wasm/expected_keepers.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

type AccountKeeper interface {
GetAccount(ctx context.Context, addr sdk.AccAddress) (acc sdk.AccountI)
HasAccount(ctx context.Context, addr sdk.AccAddress) bool
}

type WasmMsgServer interface {
Expand Down
21 changes: 21 additions & 0 deletions precompile/wasm/wasm.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ func (p PrecompiledWasm) Run(evm *vm.EVM, input []byte) ([]byte, error) {
return p.migrateContract(ctx, evm.Origin, abiMethod, args)
case SmartContractState:
return p.smartContractState(ctx, abiMethod, args)
case AssociatedAddress:
return p.associatedAddress(ctx, abiMethod, args)
default:
return nil, errors.New("method not found")
}
Expand Down Expand Up @@ -337,3 +339,22 @@ func (p PrecompiledWasm) smartContractState(ctx sdk.Context, method *abi.Method,

return method.Outputs.Pack(res)
}

func (p PrecompiledWasm) associatedAddress(ctx sdk.Context, method *abi.Method, args []interface{}) ([]byte, error) {
address, err := util.GetAccAddress(args[0])
if err != nil {
return nil, err
}

var strAddress string
if p.ak.HasAccount(ctx, address) {
// address: contract or address
account := p.ak.GetAccount(ctx, address)
strAddress = account.GetAddress().String()
} else {
// should be address type
strAddress = address.String()
}

return method.Outputs.Pack([]byte(strAddress))
}
Loading

0 comments on commit 2187c34

Please sign in to comment.