update embryo to placehodler
This commit is contained in:
parent
72c04caae9
commit
cb49edf29d
@ -274,10 +274,10 @@ func IsPaymentChannelActor(c cid.Cid) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func IsEmbryoActor(c cid.Cid) bool {
|
||||
func IsPlaceholderActor(c cid.Cid) bool {
|
||||
name, _, ok := actors.GetActorMetaByCode(c)
|
||||
if ok {
|
||||
return name == manifest.EmbryoKey
|
||||
return name == manifest.PlaceholderKey
|
||||
}
|
||||
|
||||
return false
|
||||
|
@ -153,10 +153,10 @@ func IsPaymentChannelActor(c cid.Cid) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func IsEmbryoActor(c cid.Cid) bool {
|
||||
func IsPlaceholderActor(c cid.Cid) bool {
|
||||
name, _, ok := actors.GetActorMetaByCode(c)
|
||||
if ok {
|
||||
return name == manifest.EmbryoKey
|
||||
return name == manifest.PlaceholderKey
|
||||
}
|
||||
|
||||
return false
|
||||
|
@ -14,7 +14,6 @@ import (
|
||||
cron10 "github.com/filecoin-project/go-state-types/builtin/v10/cron"
|
||||
datacap10 "github.com/filecoin-project/go-state-types/builtin/v10/datacap"
|
||||
eam10 "github.com/filecoin-project/go-state-types/builtin/v10/eam"
|
||||
embryo10 "github.com/filecoin-project/go-state-types/builtin/v10/embryo"
|
||||
ethaccount10 "github.com/filecoin-project/go-state-types/builtin/v10/ethaccount"
|
||||
evm10 "github.com/filecoin-project/go-state-types/builtin/v10/evm"
|
||||
_init10 "github.com/filecoin-project/go-state-types/builtin/v10/init"
|
||||
@ -22,6 +21,7 @@ import (
|
||||
miner10 "github.com/filecoin-project/go-state-types/builtin/v10/miner"
|
||||
multisig10 "github.com/filecoin-project/go-state-types/builtin/v10/multisig"
|
||||
paych10 "github.com/filecoin-project/go-state-types/builtin/v10/paych"
|
||||
placeholder10 "github.com/filecoin-project/go-state-types/builtin/v10/placeholder"
|
||||
power10 "github.com/filecoin-project/go-state-types/builtin/v10/power"
|
||||
reward10 "github.com/filecoin-project/go-state-types/builtin/v10/reward"
|
||||
system10 "github.com/filecoin-project/go-state-types/builtin/v10/system"
|
||||
@ -361,10 +361,10 @@ func MakeRegistry(av actorstypes.Version) []RegistryEntry {
|
||||
methods: eam10.Methods,
|
||||
state: nil,
|
||||
})
|
||||
case manifest.EmbryoKey:
|
||||
case manifest.PlaceholderKey:
|
||||
registry = append(registry, RegistryEntry{
|
||||
code: codeID,
|
||||
methods: embryo10.Methods,
|
||||
methods: placeholder10.Methods,
|
||||
state: nil,
|
||||
})
|
||||
case manifest.EthAccountKey:
|
||||
|
@ -28,7 +28,7 @@ import (
|
||||
{{if (ge . 10)}}
|
||||
evm{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/evm"
|
||||
eam{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/eam"
|
||||
embryo{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/embryo"
|
||||
placeholder{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/placeholder"
|
||||
ethaccount{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/ethaccount"
|
||||
{{end}}
|
||||
{{end}}
|
||||
@ -193,10 +193,10 @@ func MakeRegistry(av actorstypes.Version) []RegistryEntry {
|
||||
methods: eam{{.}}.Methods,
|
||||
state: nil,
|
||||
})
|
||||
case manifest.EmbryoKey:
|
||||
case manifest.PlaceholderKey:
|
||||
registry = append(registry, RegistryEntry{
|
||||
code: codeID,
|
||||
methods: embryo{{.}}.Methods,
|
||||
methods: placeholder{{.}}.Methods,
|
||||
state: nil,
|
||||
})
|
||||
case manifest.EthAccountKey:
|
||||
|
@ -441,7 +441,7 @@ func IsValidForSending(act *types.Actor) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
if !builtin.IsEmbryoActor(act.Code) || act.Nonce != 0 || act.Address == nil || act.Address.Protocol() != address.Delegated {
|
||||
if !builtin.IsPlaceholderActor(act.Code) || act.Nonce != 0 || act.Address == nil || act.Address.Protocol() != address.Delegated {
|
||||
return false
|
||||
}
|
||||
|
||||
|
2
go.mod
2
go.mod
@ -44,7 +44,7 @@ require (
|
||||
github.com/filecoin-project/go-legs v0.4.4
|
||||
github.com/filecoin-project/go-padreader v0.0.1
|
||||
github.com/filecoin-project/go-paramfetch v0.0.4
|
||||
github.com/filecoin-project/go-state-types v0.10.0-alpha-8
|
||||
github.com/filecoin-project/go-state-types v0.10.0-alpha-8.0.20230110024009-3a880f1517d4
|
||||
github.com/filecoin-project/go-statemachine v1.0.2
|
||||
github.com/filecoin-project/go-statestore v0.2.0
|
||||
github.com/filecoin-project/go-storedcounter v0.1.0
|
||||
|
4
go.sum
4
go.sum
@ -356,8 +356,8 @@ github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psS
|
||||
github.com/filecoin-project/go-state-types v0.1.6/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q=
|
||||
github.com/filecoin-project/go-state-types v0.1.8/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q=
|
||||
github.com/filecoin-project/go-state-types v0.1.10/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q=
|
||||
github.com/filecoin-project/go-state-types v0.10.0-alpha-8 h1:BPUEnjs4eBjhX+WCeG/Mfpoc7umYVgXENur73PJ1cNc=
|
||||
github.com/filecoin-project/go-state-types v0.10.0-alpha-8/go.mod h1:FPgQE05BFwZxKw/vCuIaIrzfJKo4RPQQMMPGd43dAFI=
|
||||
github.com/filecoin-project/go-state-types v0.10.0-alpha-8.0.20230110024009-3a880f1517d4 h1:gn2wOJfq2Sij0sx4I5CNkTbBxCFa8At+PqOse+7IRzA=
|
||||
github.com/filecoin-project/go-state-types v0.10.0-alpha-8.0.20230110024009-3a880f1517d4/go.mod h1:FPgQE05BFwZxKw/vCuIaIrzfJKo4RPQQMMPGd43dAFI=
|
||||
github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig=
|
||||
github.com/filecoin-project/go-statemachine v1.0.2 h1:421SSWBk8GIoCoWYYTE/d+qCWccgmRH0uXotXRDjUbc=
|
||||
github.com/filecoin-project/go-statemachine v1.0.2/go.mod h1:jZdXXiHa61n4NmgWFG4w8tnqgvZVHYbJ3yW7+y8bF54=
|
||||
|
@ -20,8 +20,8 @@ import (
|
||||
)
|
||||
|
||||
// TestEthAccountAbstraction goes over the account abstraction workflow:
|
||||
// - an embryo is created when it receives a message
|
||||
// - the embryo turns into an EOA when it sends a message
|
||||
// - an placeholder is created when it receives a message
|
||||
// - the placeholder turns into an EOA when it sends a message
|
||||
func TestEthAccountAbstraction(t *testing.T) {
|
||||
kit.QuietMiningLogs()
|
||||
|
||||
@ -35,97 +35,97 @@ func TestEthAccountAbstraction(t *testing.T) {
|
||||
secpKey, err := key.GenerateKey(types.KTDelegated)
|
||||
require.NoError(t, err)
|
||||
|
||||
embryoAddress, err := client.WalletImport(ctx, &secpKey.KeyInfo)
|
||||
placeholderAddress, err := client.WalletImport(ctx, &secpKey.KeyInfo)
|
||||
require.NoError(t, err)
|
||||
|
||||
fmt.Println(embryoAddress)
|
||||
fmt.Println(placeholderAddress)
|
||||
|
||||
// create an embryo actor at the target address
|
||||
msgCreateEmbryo := &types.Message{
|
||||
// create an placeholder actor at the target address
|
||||
msgCreatePlaceholder := &types.Message{
|
||||
From: client.DefaultKey.Address,
|
||||
To: embryoAddress,
|
||||
To: placeholderAddress,
|
||||
Value: abi.TokenAmount(types.MustParseFIL("100")),
|
||||
}
|
||||
smCreateEmbryo, err := client.MpoolPushMessage(ctx, msgCreateEmbryo, nil)
|
||||
smCreatePlaceholder, err := client.MpoolPushMessage(ctx, msgCreatePlaceholder, nil)
|
||||
require.NoError(t, err)
|
||||
mLookup, err := client.StateWaitMsg(ctx, smCreateEmbryo.Cid(), 3, api.LookbackNoLimit, true)
|
||||
mLookup, err := client.StateWaitMsg(ctx, smCreatePlaceholder.Cid(), 3, api.LookbackNoLimit, true)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, exitcode.Ok, mLookup.Receipt.ExitCode)
|
||||
|
||||
// confirm the embryo is an embryo
|
||||
embryoActor, err := client.StateGetActor(ctx, embryoAddress, types.EmptyTSK)
|
||||
// confirm the placeholder is an placeholder
|
||||
placeholderActor, err := client.StateGetActor(ctx, placeholderAddress, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, uint64(0), embryoActor.Nonce)
|
||||
require.True(t, builtin.IsEmbryoActor(embryoActor.Code))
|
||||
require.Equal(t, uint64(0), placeholderActor.Nonce)
|
||||
require.True(t, builtin.IsPlaceholderActor(placeholderActor.Code))
|
||||
|
||||
// send a message from the embryo address
|
||||
msgFromEmbryo := &types.Message{
|
||||
From: embryoAddress,
|
||||
// send a message from the placeholder address
|
||||
msgFromPlaceholder := &types.Message{
|
||||
From: placeholderAddress,
|
||||
// self-send because an "eth tx payload" can't be to a filecoin address?
|
||||
To: embryoAddress,
|
||||
To: placeholderAddress,
|
||||
}
|
||||
msgFromEmbryo, err = client.GasEstimateMessageGas(ctx, msgFromEmbryo, nil, types.EmptyTSK)
|
||||
msgFromPlaceholder, err = client.GasEstimateMessageGas(ctx, msgFromPlaceholder, nil, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
|
||||
txArgs, err := ethtypes.NewEthTxArgsFromMessage(msgFromEmbryo)
|
||||
txArgs, err := ethtypes.NewEthTxArgsFromMessage(msgFromPlaceholder)
|
||||
require.NoError(t, err)
|
||||
|
||||
digest, err := txArgs.ToRlpUnsignedMsg()
|
||||
require.NoError(t, err)
|
||||
|
||||
siggy, err := client.WalletSign(ctx, embryoAddress, digest)
|
||||
siggy, err := client.WalletSign(ctx, placeholderAddress, digest)
|
||||
require.NoError(t, err)
|
||||
|
||||
smFromEmbryoCid, err := client.MpoolPush(ctx, &types.SignedMessage{Message: *msgFromEmbryo, Signature: *siggy})
|
||||
smFromPlaceholderCid, err := client.MpoolPush(ctx, &types.SignedMessage{Message: *msgFromPlaceholder, Signature: *siggy})
|
||||
require.NoError(t, err)
|
||||
|
||||
mLookup, err = client.StateWaitMsg(ctx, smFromEmbryoCid, 3, api.LookbackNoLimit, true)
|
||||
mLookup, err = client.StateWaitMsg(ctx, smFromPlaceholderCid, 3, api.LookbackNoLimit, true)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, exitcode.Ok, mLookup.Receipt.ExitCode)
|
||||
|
||||
// confirm ugly Embryo duckling has turned into a beautiful EthAccount swan
|
||||
// confirm ugly Placeholder duckling has turned into a beautiful EthAccount swan
|
||||
|
||||
eoaActor, err := client.StateGetActor(ctx, embryoAddress, types.EmptyTSK)
|
||||
eoaActor, err := client.StateGetActor(ctx, placeholderAddress, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.False(t, builtin.IsEmbryoActor(eoaActor.Code))
|
||||
require.False(t, builtin.IsPlaceholderActor(eoaActor.Code))
|
||||
require.True(t, builtin.IsEthAccountActor(eoaActor.Code))
|
||||
require.Equal(t, uint64(1), eoaActor.Nonce)
|
||||
|
||||
// Send another message, it should succeed without any code CID changes
|
||||
|
||||
msgFromEmbryo = &types.Message{
|
||||
From: embryoAddress,
|
||||
To: embryoAddress,
|
||||
msgFromPlaceholder = &types.Message{
|
||||
From: placeholderAddress,
|
||||
To: placeholderAddress,
|
||||
Nonce: 1,
|
||||
}
|
||||
|
||||
msgFromEmbryo, err = client.GasEstimateMessageGas(ctx, msgFromEmbryo, nil, types.EmptyTSK)
|
||||
msgFromPlaceholder, err = client.GasEstimateMessageGas(ctx, msgFromPlaceholder, nil, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
|
||||
txArgs, err = ethtypes.NewEthTxArgsFromMessage(msgFromEmbryo)
|
||||
txArgs, err = ethtypes.NewEthTxArgsFromMessage(msgFromPlaceholder)
|
||||
require.NoError(t, err)
|
||||
|
||||
digest, err = txArgs.ToRlpUnsignedMsg()
|
||||
require.NoError(t, err)
|
||||
|
||||
siggy, err = client.WalletSign(ctx, embryoAddress, digest)
|
||||
siggy, err = client.WalletSign(ctx, placeholderAddress, digest)
|
||||
require.NoError(t, err)
|
||||
|
||||
smFromEmbryoCid, err = client.MpoolPush(ctx, &types.SignedMessage{Message: *msgFromEmbryo, Signature: *siggy})
|
||||
smFromPlaceholderCid, err = client.MpoolPush(ctx, &types.SignedMessage{Message: *msgFromPlaceholder, Signature: *siggy})
|
||||
require.NoError(t, err)
|
||||
|
||||
mLookup, err = client.StateWaitMsg(ctx, smFromEmbryoCid, 3, api.LookbackNoLimit, true)
|
||||
mLookup, err = client.StateWaitMsg(ctx, smFromPlaceholderCid, 3, api.LookbackNoLimit, true)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, exitcode.Ok, mLookup.Receipt.ExitCode)
|
||||
|
||||
// confirm no changes in code CID
|
||||
|
||||
eoaActor, err = client.StateGetActor(ctx, embryoAddress, types.EmptyTSK)
|
||||
eoaActor, err = client.StateGetActor(ctx, placeholderAddress, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint64(2), eoaActor.Nonce)
|
||||
|
||||
require.False(t, builtin.IsEmbryoActor(eoaActor.Code))
|
||||
require.False(t, builtin.IsPlaceholderActor(eoaActor.Code))
|
||||
require.True(t, builtin.IsEthAccountActor(eoaActor.Code))
|
||||
}
|
||||
|
@ -62,8 +62,8 @@ func TestDeployment(t *testing.T) {
|
||||
bal := client.EVM().AssertAddressBalanceConsistent(ctx, deployer)
|
||||
require.Equal(t, types.FromFil(10), bal)
|
||||
|
||||
// verify the deployer address is an embryo.
|
||||
client.AssertActorType(ctx, deployer, manifest.EmbryoKey)
|
||||
// verify the deployer address is an Placeholder.
|
||||
client.AssertActorType(ctx, deployer, manifest.PlaceholderKey)
|
||||
|
||||
gaslimit, err := client.EthEstimateGas(ctx, ethtypes.EthCall{
|
||||
From: ðAddr,
|
||||
@ -74,7 +74,7 @@ func TestDeployment(t *testing.T) {
|
||||
maxPriorityFeePerGas, err := client.EthMaxPriorityFeePerGas(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
// now deploy a contract from the embryo, and validate it went well
|
||||
// now deploy a contract from the placeholder, and validate it went well
|
||||
tx := ethtypes.EthTxArgs{
|
||||
ChainID: build.Eip155ChainId,
|
||||
Value: big.Zero(),
|
||||
|
@ -76,10 +76,10 @@ func TestAddressCreationBeforeDeploy(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, exitcode.Ok, mLookup.Receipt.ExitCode)
|
||||
|
||||
// Check if actor at new address is an embryo actor
|
||||
// Check if actor at new address is an placeholder actor
|
||||
actor, err := client.StateGetActor(ctx, contractFilAddr, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
require.True(t, builtin.IsEmbryoActor(actor.Code))
|
||||
require.True(t, builtin.IsPlaceholderActor(actor.Code))
|
||||
|
||||
// Create and deploy evm actor
|
||||
|
||||
|
@ -15,7 +15,7 @@ import (
|
||||
// AssertActorType verifies that the supplied address is an actor of the
|
||||
// specified type (as per its manifest key).
|
||||
func (f *TestFullNode) AssertActorType(ctx context.Context, addr address.Address, actorType string) {
|
||||
// validate that an embryo was created
|
||||
// validate that an placeholder was created
|
||||
act, err := f.StateGetActor(ctx, addr, types.EmptyTSK)
|
||||
require.NoError(f.t, err)
|
||||
|
||||
|
@ -636,7 +636,7 @@ func (a *EthModule) EthSendRawTransaction(ctx context.Context, rawTx ethtypes.Et
|
||||
_, err = a.StateAPI.StateGetActor(ctx, smsg.Message.To, types.EmptyTSK)
|
||||
if err != nil {
|
||||
// if actor does not exist on chain yet, set the method to 0 because
|
||||
// embryos only implement method 0
|
||||
// placeholders only implement method 0
|
||||
smsg.Message.Method = builtinactors.MethodSend
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user