test: eth: make sure we can deploy a new placeholder on transfer (#10281)
We have a test that triggers smart-contract logic on "transfers", but nothing that tries to create a new actor as a side-effect of a transfer. fixes https://github.com/filecoin-project/ref-fvm/issues/1670
This commit is contained in:
parent
8f1c23296e
commit
73102e9432
@ -844,6 +844,39 @@ func TestFEVMBareTransferTriggersSmartContractLogic(t *testing.T) {
|
|||||||
require.Len(t, receipt.Logs, 1)
|
require.Len(t, receipt.Logs, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This test ensures that we can deploy new contracts from a solidity call to `transfer` without
|
||||||
|
// exceeding the 10M gas limit.
|
||||||
|
func TestFEVMTestDeployOnTransfer(t *testing.T) {
|
||||||
|
ctx, cancel, client := kit.SetupFEVMTest(t)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
fromAddr := client.DefaultKey.Address
|
||||||
|
t.Log("from - ", fromAddr)
|
||||||
|
|
||||||
|
//create contract A
|
||||||
|
filenameStorage := "contracts/ValueSender.hex"
|
||||||
|
fromAddr, contractAddr := client.EVM().DeployContractFromFilename(ctx, filenameStorage)
|
||||||
|
|
||||||
|
//send to some random address.
|
||||||
|
params := [32]byte{}
|
||||||
|
params[30] = 0xff
|
||||||
|
randomAddr, err := ethtypes.CastEthAddress(params[12:])
|
||||||
|
value := big.NewInt(100)
|
||||||
|
entryPoint := kit.CalcFuncSignature("sendEthToB(address)")
|
||||||
|
require.NoError(t, err)
|
||||||
|
ret, err := client.EVM().InvokeSolidityWithValue(ctx, fromAddr, contractAddr, entryPoint, params[:], value)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.True(t, ret.Receipt.ExitCode.IsSuccess())
|
||||||
|
|
||||||
|
balance, err := client.EVM().EthGetBalance(ctx, randomAddr, "latest")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, value.Int, balance.Int)
|
||||||
|
|
||||||
|
filAddr, err := randomAddr.ToFilecoinAddress()
|
||||||
|
require.NoError(t, err)
|
||||||
|
client.AssertActorType(ctx, filAddr, manifest.PlaceholderKey)
|
||||||
|
}
|
||||||
|
|
||||||
func TestFEVMProxyUpgradeable(t *testing.T) {
|
func TestFEVMProxyUpgradeable(t *testing.T) {
|
||||||
ctx, cancel, client := kit.SetupFEVMTest(t)
|
ctx, cancel, client := kit.SetupFEVMTest(t)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
@ -104,6 +104,10 @@ func (e *EVM) DeployContractFromFilename(ctx context.Context, binFilename string
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e *EVM) InvokeSolidity(ctx context.Context, sender address.Address, target address.Address, selector []byte, inputData []byte) (*api.MsgLookup, error) {
|
func (e *EVM) InvokeSolidity(ctx context.Context, sender address.Address, target address.Address, selector []byte, inputData []byte) (*api.MsgLookup, error) {
|
||||||
|
return e.InvokeSolidityWithValue(ctx, sender, target, selector, inputData, big.Zero())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EVM) InvokeSolidityWithValue(ctx context.Context, sender address.Address, target address.Address, selector []byte, inputData []byte, value big.Int) (*api.MsgLookup, error) {
|
||||||
params := append(selector, inputData...)
|
params := append(selector, inputData...)
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
err := cbg.WriteByteArray(&buffer, params)
|
err := cbg.WriteByteArray(&buffer, params)
|
||||||
@ -115,7 +119,7 @@ func (e *EVM) InvokeSolidity(ctx context.Context, sender address.Address, target
|
|||||||
msg := &types.Message{
|
msg := &types.Message{
|
||||||
To: target,
|
To: target,
|
||||||
From: sender,
|
From: sender,
|
||||||
Value: big.Zero(),
|
Value: value,
|
||||||
Method: builtintypes.MethodsEVM.InvokeContract,
|
Method: builtintypes.MethodsEVM.InvokeContract,
|
||||||
GasLimit: build.BlockGasLimit, // note: we hardcode block gas limit due to slightly broken gas estimation - https://github.com/filecoin-project/lotus/issues/10041
|
GasLimit: build.BlockGasLimit, // note: we hardcode block gas limit due to slightly broken gas estimation - https://github.com/filecoin-project/lotus/issues/10041
|
||||||
Params: params,
|
Params: params,
|
||||||
|
Loading…
Reference in New Issue
Block a user