mirror of https://github.com/poanetwork/gecko.git
linked atomic swaps to main
This commit is contained in:
parent
3efccbf354
commit
87ea21c63f
|
@ -14,8 +14,10 @@ import (
|
|||
|
||||
"github.com/ava-labs/gecko/ids"
|
||||
"github.com/ava-labs/gecko/vms/avm"
|
||||
"github.com/ava-labs/gecko/vms/components/codec"
|
||||
"github.com/ava-labs/gecko/vms/evm"
|
||||
"github.com/ava-labs/gecko/vms/platformvm"
|
||||
"github.com/ava-labs/gecko/vms/secp256k1fx"
|
||||
"github.com/ava-labs/gecko/vms/spchainvm"
|
||||
"github.com/ava-labs/gecko/vms/spdagvm"
|
||||
"github.com/ava-labs/gecko/vms/timestampvm"
|
||||
|
@ -514,3 +516,29 @@ func VMGenesis(networkID uint32, vmID ids.ID) *platformvm.CreateChainTx {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AVAAssetID ...
|
||||
func AVAAssetID(networkID uint32) ids.ID {
|
||||
createAVM := VMGenesis(networkID, avm.ID)
|
||||
|
||||
c := codec.NewDefault()
|
||||
c.RegisterType(&avm.BaseTx{})
|
||||
c.RegisterType(&avm.CreateAssetTx{})
|
||||
c.RegisterType(&avm.OperationTx{})
|
||||
c.RegisterType(&avm.ImportTx{})
|
||||
c.RegisterType(&avm.ExportTx{})
|
||||
c.RegisterType(&secp256k1fx.MintOutput{})
|
||||
c.RegisterType(&secp256k1fx.TransferOutput{})
|
||||
c.RegisterType(&secp256k1fx.MintInput{})
|
||||
c.RegisterType(&secp256k1fx.TransferInput{})
|
||||
c.RegisterType(&secp256k1fx.Credential{})
|
||||
|
||||
genesis := avm.Genesis{}
|
||||
c.Unmarshal(createAVM.GenesisData, &genesis)
|
||||
|
||||
genesisTx := genesis.Txs[0]
|
||||
tx := avm.Tx{UnsignedTx: &genesisTx.CreateAssetTx}
|
||||
txBytes, _ := c.Marshal(&tx)
|
||||
tx.Initialize(txBytes)
|
||||
return tx.ID()
|
||||
}
|
||||
|
|
|
@ -326,7 +326,10 @@ func (n *Node) initNodeID() error {
|
|||
// its factory needs to reference n.chainManager, which is nil right now
|
||||
func (n *Node) initVMManager() {
|
||||
n.vmManager = vms.NewManager(&n.APIServer, n.HTTPLog)
|
||||
n.vmManager.RegisterVMFactory(avm.ID, &avm.Factory{})
|
||||
n.vmManager.RegisterVMFactory(avm.ID, &avm.Factory{
|
||||
AVA: genesis.AVAAssetID(n.Config.NetworkID),
|
||||
Platform: ids.Empty,
|
||||
})
|
||||
n.vmManager.RegisterVMFactory(evm.ID, &evm.Factory{})
|
||||
n.vmManager.RegisterVMFactory(spdagvm.ID, &spdagvm.Factory{TxFee: n.Config.AvaTxFee})
|
||||
n.vmManager.RegisterVMFactory(spchainvm.ID, &spchainvm.Factory{})
|
||||
|
@ -362,6 +365,8 @@ func (n *Node) initChains() {
|
|||
/*vmFactory=*/ &platformvm.Factory{
|
||||
ChainManager: n.chainManager,
|
||||
Validators: vdrs,
|
||||
AVA: genesis.AVAAssetID(n.Config.NetworkID),
|
||||
AVM: genesis.VMGenesis(n.Config.NetworkID, avm.ID).ID(),
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
@ -112,6 +112,9 @@ func (t *ExportTx) SemanticVerify(vm *VM, uTx *UniqueTx, creds []verify.Verifiab
|
|||
if !utxoAssetID.Equals(inAssetID) {
|
||||
return errAssetIDMismatch
|
||||
}
|
||||
if !utxoAssetID.Equals(vm.ava) {
|
||||
return errWrongAssetID
|
||||
}
|
||||
|
||||
if !vm.verifyFxUsage(fxIndex, inAssetID) {
|
||||
return errIncompatibleFx
|
||||
|
@ -128,9 +131,8 @@ func (t *ExportTx) SemanticVerify(vm *VM, uTx *UniqueTx, creds []verify.Verifiab
|
|||
func (t *ExportTx) ExecuteWithSideEffects(vm *VM, batch database.Batch) error {
|
||||
txID := t.ID()
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(vm.platform)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(vm.platform)
|
||||
|
||||
vsmDB := versiondb.New(smDB)
|
||||
|
||||
|
|
|
@ -130,8 +130,16 @@ func TestIssueExportTx(t *testing.T) {
|
|||
ctx.ChainID = chainID
|
||||
ctx.SharedMemory = sm.NewBlockchainSharedMemory(chainID)
|
||||
|
||||
genesisTx := GetFirstTxFromGenesisTest(genesisBytes, t)
|
||||
|
||||
avaID := genesisTx.ID()
|
||||
platformID := ids.Empty.Prefix(0)
|
||||
|
||||
ctx.Lock.Lock()
|
||||
vm := &VM{}
|
||||
vm := &VM{
|
||||
ava: avaID,
|
||||
platform: platformID,
|
||||
}
|
||||
err := vm.Initialize(
|
||||
ctx,
|
||||
memdb.New(),
|
||||
|
@ -149,8 +157,6 @@ func TestIssueExportTx(t *testing.T) {
|
|||
|
||||
key := keys[0]
|
||||
|
||||
genesisTx := GetFirstTxFromGenesisTest(genesisBytes, t)
|
||||
|
||||
tx := &Tx{UnsignedTx: &ExportTx{
|
||||
BaseTx: BaseTx{
|
||||
NetID: networkID,
|
||||
|
@ -158,17 +164,17 @@ func TestIssueExportTx(t *testing.T) {
|
|||
},
|
||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
||||
UTXOID: ava.UTXOID{
|
||||
TxID: genesisTx.ID(),
|
||||
TxID: avaID,
|
||||
OutputIndex: 1,
|
||||
},
|
||||
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||
Asset: ava.Asset{ID: avaID},
|
||||
In: &secp256k1fx.TransferInput{
|
||||
Amt: 50000,
|
||||
Input: secp256k1fx.Input{SigIndices: []uint32{0}},
|
||||
},
|
||||
}},
|
||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
||||
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||
Asset: ava.Asset{ID: avaID},
|
||||
Out: &secp256k1fx.TransferOutput{
|
||||
Amt: 50000,
|
||||
OutputOwners: secp256k1fx.OutputOwners{
|
||||
|
@ -228,9 +234,8 @@ func TestIssueExportTx(t *testing.T) {
|
|||
}
|
||||
parsedTx.Accept()
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(platformID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(platformID)
|
||||
|
||||
state := ava.NewPrefixedState(smDB, vm.codec)
|
||||
|
||||
|
@ -261,8 +266,16 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
|||
ctx.ChainID = chainID
|
||||
ctx.SharedMemory = sm.NewBlockchainSharedMemory(chainID)
|
||||
|
||||
genesisTx := GetFirstTxFromGenesisTest(genesisBytes, t)
|
||||
|
||||
avaID := genesisTx.ID()
|
||||
platformID := ids.Empty.Prefix(0)
|
||||
|
||||
ctx.Lock.Lock()
|
||||
vm := &VM{}
|
||||
vm := &VM{
|
||||
ava: avaID,
|
||||
platform: platformID,
|
||||
}
|
||||
err := vm.Initialize(
|
||||
ctx,
|
||||
memdb.New(),
|
||||
|
@ -280,8 +293,6 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
|||
|
||||
key := keys[0]
|
||||
|
||||
genesisTx := GetFirstTxFromGenesisTest(genesisBytes, t)
|
||||
|
||||
tx := &Tx{UnsignedTx: &ExportTx{
|
||||
BaseTx: BaseTx{
|
||||
NetID: networkID,
|
||||
|
@ -289,17 +300,17 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
|||
},
|
||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
||||
UTXOID: ava.UTXOID{
|
||||
TxID: genesisTx.ID(),
|
||||
TxID: avaID,
|
||||
OutputIndex: 1,
|
||||
},
|
||||
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||
Asset: ava.Asset{ID: avaID},
|
||||
In: &secp256k1fx.TransferInput{
|
||||
Amt: 50000,
|
||||
Input: secp256k1fx.Input{SigIndices: []uint32{0}},
|
||||
},
|
||||
}},
|
||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
||||
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||
Asset: ava.Asset{ID: avaID},
|
||||
Out: &secp256k1fx.TransferOutput{
|
||||
Amt: 50000,
|
||||
OutputOwners: secp256k1fx.OutputOwners{
|
||||
|
@ -358,8 +369,7 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(platformID)
|
||||
|
||||
state := ava.NewPrefixedState(smDB, vm.codec)
|
||||
|
||||
|
@ -372,12 +382,12 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
vm.ctx.SharedMemory.ReleaseDatabase(platformID)
|
||||
|
||||
parsedTx.Accept()
|
||||
|
||||
smDB = vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB = vm.ctx.SharedMemory.GetDatabase(platformID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(platformID)
|
||||
|
||||
state = ava.NewPrefixedState(smDB, vm.codec)
|
||||
|
||||
|
|
|
@ -13,7 +13,15 @@ var (
|
|||
)
|
||||
|
||||
// Factory ...
|
||||
type Factory struct{}
|
||||
type Factory struct {
|
||||
AVA ids.ID
|
||||
Platform ids.ID
|
||||
}
|
||||
|
||||
// New ...
|
||||
func (f *Factory) New() interface{} { return &VM{} }
|
||||
func (f *Factory) New() interface{} {
|
||||
return &VM{
|
||||
ava: f.AVA,
|
||||
platform: f.Platform,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,9 +112,8 @@ func (t *ImportTx) SemanticVerify(vm *VM, uTx *UniqueTx, creds []verify.Verifiab
|
|||
return err
|
||||
}
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(vm.platform)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(vm.platform)
|
||||
|
||||
state := ava.NewPrefixedState(smDB, vm.codec)
|
||||
|
||||
|
@ -138,6 +137,9 @@ func (t *ImportTx) SemanticVerify(vm *VM, uTx *UniqueTx, creds []verify.Verifiab
|
|||
if !utxoAssetID.Equals(inAssetID) {
|
||||
return errAssetIDMismatch
|
||||
}
|
||||
if !utxoAssetID.Equals(vm.ava) {
|
||||
return errWrongAssetID
|
||||
}
|
||||
|
||||
if !vm.verifyFxUsage(fxIndex, inAssetID) {
|
||||
return errIncompatibleFx
|
||||
|
@ -152,9 +154,8 @@ func (t *ImportTx) SemanticVerify(vm *VM, uTx *UniqueTx, creds []verify.Verifiab
|
|||
|
||||
// ExecuteWithSideEffects writes the batch with any additional side effects
|
||||
func (t *ImportTx) ExecuteWithSideEffects(vm *VM, batch database.Batch) error {
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(vm.platform)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(vm.platform)
|
||||
|
||||
vsmDB := versiondb.New(smDB)
|
||||
|
||||
|
|
|
@ -130,8 +130,16 @@ func TestIssueImportTx(t *testing.T) {
|
|||
ctx.ChainID = chainID
|
||||
ctx.SharedMemory = sm.NewBlockchainSharedMemory(chainID)
|
||||
|
||||
genesisTx := GetFirstTxFromGenesisTest(genesisBytes, t)
|
||||
|
||||
avaID := genesisTx.ID()
|
||||
platformID := ids.Empty.Prefix(0)
|
||||
|
||||
ctx.Lock.Lock()
|
||||
vm := &VM{}
|
||||
vm := &VM{
|
||||
ava: avaID,
|
||||
platform: platformID,
|
||||
}
|
||||
err := vm.Initialize(
|
||||
ctx,
|
||||
memdb.New(),
|
||||
|
@ -149,8 +157,6 @@ func TestIssueImportTx(t *testing.T) {
|
|||
|
||||
key := keys[0]
|
||||
|
||||
genesisTx := GetFirstTxFromGenesisTest(genesisBytes, t)
|
||||
|
||||
utxoID := ava.UTXOID{
|
||||
TxID: ids.NewID([32]byte{
|
||||
0x0f, 0x2f, 0x4f, 0x6f, 0x8e, 0xae, 0xce, 0xee,
|
||||
|
@ -167,7 +173,7 @@ func TestIssueImportTx(t *testing.T) {
|
|||
},
|
||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
||||
UTXOID: utxoID,
|
||||
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||
Asset: ava.Asset{ID: avaID},
|
||||
In: &secp256k1fx.TransferInput{
|
||||
Amt: 1000,
|
||||
Input: secp256k1fx.Input{SigIndices: []uint32{0}},
|
||||
|
@ -205,12 +211,11 @@ func TestIssueImportTx(t *testing.T) {
|
|||
|
||||
// Provide the platform UTXO:
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(platformID)
|
||||
|
||||
utxo := &ava.UTXO{
|
||||
UTXOID: utxoID,
|
||||
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||
Asset: ava.Asset{ID: avaID},
|
||||
Out: &secp256k1fx.TransferOutput{
|
||||
Amt: 1000,
|
||||
OutputOwners: secp256k1fx.OutputOwners{
|
||||
|
@ -225,7 +230,7 @@ func TestIssueImportTx(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
vm.ctx.SharedMemory.ReleaseDatabase(platformID)
|
||||
|
||||
if _, err := vm.IssueTx(tx.Bytes(), nil); err != nil {
|
||||
t.Fatalf("should have issued the transaction correctly but errored: %s", err)
|
||||
|
@ -246,8 +251,8 @@ func TestIssueImportTx(t *testing.T) {
|
|||
parsedTx := txs[0]
|
||||
parsedTx.Accept()
|
||||
|
||||
smDB = vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB = vm.ctx.SharedMemory.GetDatabase(platformID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(platformID)
|
||||
|
||||
state = ava.NewPrefixedState(smDB, vm.codec)
|
||||
if _, err := state.PlatformUTXO(utxoID.InputID()); err == nil {
|
||||
|
@ -269,10 +274,12 @@ func TestForceAcceptImportTx(t *testing.T) {
|
|||
ctx.ChainID = chainID
|
||||
ctx.SharedMemory = sm.NewBlockchainSharedMemory(chainID)
|
||||
|
||||
platformID := ids.Empty.Prefix(0)
|
||||
|
||||
ctx.Lock.Lock()
|
||||
defer ctx.Lock.Unlock()
|
||||
|
||||
vm := &VM{}
|
||||
vm := &VM{platform: platformID}
|
||||
err := vm.Initialize(
|
||||
ctx,
|
||||
memdb.New(),
|
||||
|
@ -351,9 +358,8 @@ func TestForceAcceptImportTx(t *testing.T) {
|
|||
|
||||
parsedTx.Accept()
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := vm.ctx.SharedMemory.GetDatabase(platformID)
|
||||
defer vm.ctx.SharedMemory.ReleaseDatabase(platformID)
|
||||
|
||||
state := ava.NewPrefixedState(smDB, vm.codec)
|
||||
utxoSource := utxoID.InputID()
|
||||
|
|
|
@ -14,6 +14,7 @@ import (
|
|||
|
||||
var (
|
||||
errAssetIDMismatch = errors.New("asset IDs in the input don't match the utxo")
|
||||
errWrongAssetID = errors.New("asset ID must be AVA in the atomic tx")
|
||||
errMissingUTXO = errors.New("missing utxo")
|
||||
errUnknownTx = errors.New("transaction is unknown")
|
||||
errRejectedTx = errors.New("transaction is rejected")
|
||||
|
|
|
@ -50,6 +50,9 @@ var (
|
|||
type VM struct {
|
||||
ids.Aliaser
|
||||
|
||||
ava ids.ID
|
||||
platform ids.ID
|
||||
|
||||
// Contains information of where this VM is executing
|
||||
ctx *snow.Context
|
||||
|
||||
|
|
|
@ -148,8 +148,8 @@ func (tx *CreateChainTx) SemanticVerify(db database.Database) (func(), error) {
|
|||
chainParams.FxAliases = append(chainParams.FxAliases, fxID.String())
|
||||
}
|
||||
// TODO: Not sure how else to make this not nil pointer error during tests
|
||||
if tx.vm.ChainManager != nil {
|
||||
tx.vm.ChainManager.CreateChain(chainParams)
|
||||
if tx.vm.chainManager != nil {
|
||||
tx.vm.chainManager.CreateChain(chainParams)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ func (tx *ExportTx) SyntacticVerify() error {
|
|||
if err := out.Verify(); err != nil {
|
||||
return err
|
||||
}
|
||||
if !out.AssetID().Equals(tx.vm.AVA) {
|
||||
if !out.AssetID().Equals(tx.vm.ava) {
|
||||
return errUnknownAsset
|
||||
}
|
||||
}
|
||||
|
@ -141,9 +141,8 @@ func (tx *ExportTx) SemanticVerify(db database.Database) error {
|
|||
func (tx *ExportTx) Accept(batch database.Batch) error {
|
||||
txID := tx.ID()
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := tx.vm.Ctx.SharedMemory.GetDatabase(bID)
|
||||
defer tx.vm.Ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := tx.vm.Ctx.SharedMemory.GetDatabase(tx.vm.avm)
|
||||
defer tx.vm.Ctx.SharedMemory.ReleaseDatabase(tx.vm.avm)
|
||||
|
||||
vsmDB := versiondb.New(smDB)
|
||||
|
||||
|
|
|
@ -18,12 +18,16 @@ var (
|
|||
type Factory struct {
|
||||
ChainManager chains.Manager
|
||||
Validators validators.Manager
|
||||
AVA ids.ID
|
||||
AVM ids.ID
|
||||
}
|
||||
|
||||
// New returns a new instance of the Platform Chain
|
||||
func (f *Factory) New() interface{} {
|
||||
return &VM{
|
||||
ChainManager: f.ChainManager,
|
||||
Validators: f.Validators,
|
||||
chainManager: f.ChainManager,
|
||||
validators: f.Validators,
|
||||
ava: f.AVA,
|
||||
avm: f.AVM,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@ func (tx *ImportTx) SyntacticVerify() error {
|
|||
if err := in.Verify(); err != nil {
|
||||
return err
|
||||
}
|
||||
if !in.AssetID().Equals(tx.vm.AVA) {
|
||||
if !in.AssetID().Equals(tx.vm.ava) {
|
||||
return errUnknownAsset
|
||||
}
|
||||
}
|
||||
|
@ -181,9 +181,8 @@ func (tx *ImportTx) SemanticVerify(db database.Database) error {
|
|||
return err
|
||||
}
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := tx.vm.Ctx.SharedMemory.GetDatabase(bID)
|
||||
defer tx.vm.Ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := tx.vm.Ctx.SharedMemory.GetDatabase(tx.vm.avm)
|
||||
defer tx.vm.Ctx.SharedMemory.ReleaseDatabase(tx.vm.avm)
|
||||
|
||||
state := ava.NewPrefixedState(smDB, Codec)
|
||||
|
||||
|
@ -211,9 +210,8 @@ func (tx *ImportTx) SemanticVerify(db database.Database) error {
|
|||
|
||||
// Accept this transaction.
|
||||
func (tx *ImportTx) Accept(batch database.Batch) error {
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := tx.vm.Ctx.SharedMemory.GetDatabase(bID)
|
||||
defer tx.vm.Ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := tx.vm.Ctx.SharedMemory.GetDatabase(tx.vm.avm)
|
||||
defer tx.vm.Ctx.SharedMemory.ReleaseDatabase(tx.vm.avm)
|
||||
|
||||
vsmDB := versiondb.New(smDB)
|
||||
|
||||
|
|
|
@ -248,7 +248,7 @@ func (service *Service) SampleValidators(_ *http.Request, args *SampleValidators
|
|||
args.SubnetID = DefaultSubnetID
|
||||
}
|
||||
|
||||
validators, ok := service.vm.Validators.GetValidatorSet(args.SubnetID)
|
||||
validators, ok := service.vm.validators.GetValidatorSet(args.SubnetID)
|
||||
if !ok {
|
||||
return fmt.Errorf("couldn't get validators of subnet with ID %s. Does it exist?", args.SubnetID)
|
||||
}
|
||||
|
@ -902,14 +902,14 @@ type CreateBlockchainReply struct {
|
|||
|
||||
// CreateBlockchain issues a transaction to the network to create a new blockchain
|
||||
func (service *Service) CreateBlockchain(_ *http.Request, args *CreateBlockchainArgs, reply *CreateBlockchainReply) error {
|
||||
vmID, err := service.vm.ChainManager.LookupVM(args.VMID)
|
||||
vmID, err := service.vm.chainManager.LookupVM(args.VMID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("no VM with ID '%s' found", args.VMID)
|
||||
}
|
||||
|
||||
fxIDs := []ids.ID(nil)
|
||||
for _, fxIDStr := range args.FxIDs {
|
||||
fxID, err := service.vm.ChainManager.LookupVM(fxIDStr)
|
||||
fxID, err := service.vm.chainManager.LookupVM(fxIDStr)
|
||||
if err != nil {
|
||||
return fmt.Errorf("no FX with ID '%s' found", fxIDStr)
|
||||
}
|
||||
|
@ -974,7 +974,7 @@ type GetBlockchainStatusReply struct {
|
|||
|
||||
// GetBlockchainStatus gets the status of a blockchain with the ID [args.BlockchainID].
|
||||
func (service *Service) GetBlockchainStatus(_ *http.Request, args *GetBlockchainStatusArgs, reply *GetBlockchainStatusReply) error {
|
||||
_, err := service.vm.ChainManager.Lookup(args.BlockchainID)
|
||||
_, err := service.vm.chainManager.Lookup(args.BlockchainID)
|
||||
if err == nil {
|
||||
reply.Status = Validating
|
||||
return nil
|
||||
|
|
|
@ -150,13 +150,16 @@ func init() {
|
|||
type VM struct {
|
||||
*core.SnowmanVM
|
||||
|
||||
Validators validators.Manager
|
||||
validators validators.Manager
|
||||
|
||||
// The node's chain manager
|
||||
ChainManager chains.Manager
|
||||
chainManager chains.Manager
|
||||
|
||||
// AVA asset ID
|
||||
AVA ids.ID
|
||||
ava ids.ID
|
||||
|
||||
// AVM is the ID of the ava virtual machine
|
||||
avm ids.ID
|
||||
|
||||
fx secp256k1fx.Fx
|
||||
codec codec.Codec
|
||||
|
@ -325,7 +328,7 @@ func (vm *VM) initBlockchains() error {
|
|||
for _, fxID := range chain.FxIDs {
|
||||
chainParams.FxAliases = append(chainParams.FxAliases, fxID.String())
|
||||
}
|
||||
vm.ChainManager.CreateChain(chainParams)
|
||||
vm.chainManager.CreateChain(chainParams)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -717,7 +720,7 @@ func (vm *VM) getValidators(validatorEvents *EventHeap) []validators.Validator {
|
|||
}
|
||||
|
||||
func (vm *VM) updateValidators(subnetID ids.ID) error {
|
||||
validatorSet, ok := vm.Validators.GetValidatorSet(subnetID)
|
||||
validatorSet, ok := vm.validators.GetValidatorSet(subnetID)
|
||||
if !ok {
|
||||
return fmt.Errorf("couldn't get the validator sampler of the %s subnet", subnetID)
|
||||
}
|
||||
|
|
|
@ -120,8 +120,8 @@ func defaultVM() *VM {
|
|||
}
|
||||
|
||||
defaultSubnet := validators.NewSet()
|
||||
vm.Validators = validators.NewManager()
|
||||
vm.Validators.PutValidatorSet(DefaultSubnetID, defaultSubnet)
|
||||
vm.validators = validators.NewManager()
|
||||
vm.validators.PutValidatorSet(DefaultSubnetID, defaultSubnet)
|
||||
|
||||
vm.clock.Set(defaultGenesisTime)
|
||||
db := memdb.New()
|
||||
|
@ -1068,11 +1068,12 @@ func TestCreateSubnet(t *testing.T) {
|
|||
func TestAtomicImport(t *testing.T) {
|
||||
vm := defaultVM()
|
||||
|
||||
avmID := ids.Empty.Prefix(0)
|
||||
utxoID := ava.UTXOID{
|
||||
TxID: ids.Empty.Prefix(0),
|
||||
TxID: ids.Empty.Prefix(1),
|
||||
OutputIndex: 1,
|
||||
}
|
||||
assetID := ids.Empty.Prefix(1)
|
||||
assetID := ids.Empty.Prefix(2)
|
||||
amount := uint64(50000)
|
||||
key := keys[0]
|
||||
|
||||
|
@ -1102,7 +1103,8 @@ func TestAtomicImport(t *testing.T) {
|
|||
vm.Ctx.Lock.Lock()
|
||||
defer vm.Ctx.Lock.Unlock()
|
||||
|
||||
vm.AVA = assetID
|
||||
vm.ava = assetID
|
||||
vm.avm = avmID
|
||||
|
||||
vm.unissuedAtomicTxs = append(vm.unissuedAtomicTxs, tx)
|
||||
if _, err := vm.BuildBlock(); err == nil {
|
||||
|
@ -1111,8 +1113,7 @@ func TestAtomicImport(t *testing.T) {
|
|||
|
||||
// Provide the avm UTXO:
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.Ctx.SharedMemory.GetDatabase(bID)
|
||||
smDB := vm.Ctx.SharedMemory.GetDatabase(avmID)
|
||||
|
||||
utxo := &ava.UTXO{
|
||||
UTXOID: utxoID,
|
||||
|
@ -1131,7 +1132,7 @@ func TestAtomicImport(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
vm.Ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
vm.Ctx.SharedMemory.ReleaseDatabase(avmID)
|
||||
|
||||
vm.unissuedAtomicTxs = append(vm.unissuedAtomicTxs, tx)
|
||||
blk, err := vm.BuildBlock()
|
||||
|
@ -1145,8 +1146,8 @@ func TestAtomicImport(t *testing.T) {
|
|||
|
||||
blk.Accept()
|
||||
|
||||
smDB = vm.Ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.Ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB = vm.Ctx.SharedMemory.GetDatabase(avmID)
|
||||
defer vm.Ctx.SharedMemory.ReleaseDatabase(avmID)
|
||||
|
||||
state = ava.NewPrefixedState(smDB, vm.codec)
|
||||
if _, err := state.AVMUTXO(utxoID.InputID()); err == nil {
|
||||
|
@ -1158,11 +1159,12 @@ func TestAtomicImport(t *testing.T) {
|
|||
func TestOptimisticAtomicImport(t *testing.T) {
|
||||
vm := defaultVM()
|
||||
|
||||
avmID := ids.Empty.Prefix(0)
|
||||
utxoID := ava.UTXOID{
|
||||
TxID: ids.Empty.Prefix(0),
|
||||
TxID: ids.Empty.Prefix(1),
|
||||
OutputIndex: 1,
|
||||
}
|
||||
assetID := ids.Empty.Prefix(1)
|
||||
assetID := ids.Empty.Prefix(2)
|
||||
amount := uint64(50000)
|
||||
key := keys[0]
|
||||
|
||||
|
@ -1192,7 +1194,8 @@ func TestOptimisticAtomicImport(t *testing.T) {
|
|||
vm.Ctx.Lock.Lock()
|
||||
defer vm.Ctx.Lock.Unlock()
|
||||
|
||||
vm.AVA = assetID
|
||||
vm.ava = assetID
|
||||
vm.avm = avmID
|
||||
|
||||
blk, err := vm.newAtomicBlock(vm.Preferred(), tx)
|
||||
if err != nil {
|
||||
|
@ -1219,9 +1222,8 @@ func TestOptimisticAtomicImport(t *testing.T) {
|
|||
t.Fatalf("failed to provide funds")
|
||||
}
|
||||
|
||||
bID := ids.Empty // TODO: Needs to be set to the platform chain
|
||||
smDB := vm.Ctx.SharedMemory.GetDatabase(bID)
|
||||
defer vm.Ctx.SharedMemory.ReleaseDatabase(bID)
|
||||
smDB := vm.Ctx.SharedMemory.GetDatabase(avmID)
|
||||
defer vm.Ctx.SharedMemory.ReleaseDatabase(avmID)
|
||||
|
||||
state := ava.NewPrefixedState(smDB, Codec)
|
||||
if _, err := state.AVMStatus(utxoID.InputID()); err != nil {
|
||||
|
|
|
@ -176,7 +176,7 @@ func (w *Wallet) CreateTx(assetID ids.ID, amount uint64, destAddr ids.ShortID) (
|
|||
return nil, errors.New("insufficient funds")
|
||||
}
|
||||
|
||||
avm.SortTransferableInputsWithSigners(ins, keys)
|
||||
ava.SortTransferableInputsWithSigners(ins, keys)
|
||||
|
||||
outs := []*ava.TransferableOutput{&ava.TransferableOutput{
|
||||
Asset: ava.Asset{ID: assetID},
|
||||
|
|
Loading…
Reference in New Issue