core: remove interop methods from interopContext
If interops are defined as a separate functions they can be implemented in a separate packages which can help us to structure core.
This commit is contained in:
parent
6d9c59f7fe
commit
efddcf3bfe
7 changed files with 390 additions and 389 deletions
|
@ -39,7 +39,7 @@ import (
|
|||
func TestGetTrigger(t *testing.T) {
|
||||
v, _, context, chain := createVMAndPushBlock(t)
|
||||
defer chain.Close()
|
||||
require.NoError(t, context.runtimeGetTrigger(v))
|
||||
require.NoError(t, runtimeGetTrigger(context, v))
|
||||
}
|
||||
|
||||
func TestStorageFind(t *testing.T) {
|
||||
|
@ -69,25 +69,25 @@ func TestStorageFind(t *testing.T) {
|
|||
v.Estack().PushVal([]byte{0x01})
|
||||
v.Estack().PushVal(vm.NewInteropItem(&StorageContext{ScriptHash: scriptHash}))
|
||||
|
||||
err := context.storageFind(v)
|
||||
err := storageFind(context, v)
|
||||
require.NoError(t, err)
|
||||
|
||||
var iter *vm.InteropItem
|
||||
require.NotPanics(t, func() { iter = v.Estack().Top().Interop() })
|
||||
|
||||
require.NoError(t, context.enumeratorNext(v))
|
||||
require.NoError(t, enumeratorNext(context, v))
|
||||
require.True(t, v.Estack().Pop().Bool())
|
||||
|
||||
v.Estack().PushVal(iter)
|
||||
require.NoError(t, context.iteratorKey(v))
|
||||
require.NoError(t, iteratorKey(context, v))
|
||||
require.Equal(t, []byte{0x01, 0x02}, v.Estack().Pop().Bytes())
|
||||
|
||||
v.Estack().PushVal(iter)
|
||||
require.NoError(t, context.enumeratorValue(v))
|
||||
require.NoError(t, enumeratorValue(context, v))
|
||||
require.Equal(t, []byte{0x01, 0x02, 0x03, 0x04}, v.Estack().Pop().Bytes())
|
||||
|
||||
v.Estack().PushVal(iter)
|
||||
require.NoError(t, context.enumeratorNext(v))
|
||||
require.NoError(t, enumeratorNext(context, v))
|
||||
require.False(t, v.Estack().Pop().Bool())
|
||||
})
|
||||
|
||||
|
@ -95,7 +95,7 @@ func TestStorageFind(t *testing.T) {
|
|||
v.Estack().PushVal([]byte{0x01})
|
||||
v.Estack().PushVal(vm.NewInteropItem(nil))
|
||||
|
||||
require.Error(t, context.storageFind(v))
|
||||
require.Error(t, storageFind(context, v))
|
||||
})
|
||||
|
||||
t.Run("invalid script hash", func(t *testing.T) {
|
||||
|
@ -105,7 +105,7 @@ func TestStorageFind(t *testing.T) {
|
|||
v.Estack().PushVal([]byte{0x01})
|
||||
v.Estack().PushVal(vm.NewInteropItem(&StorageContext{ScriptHash: invalidHash}))
|
||||
|
||||
require.Error(t, context.storageFind(v))
|
||||
require.Error(t, storageFind(context, v))
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,7 @@ func TestHeaderGetVersion(t *testing.T) {
|
|||
v, block, context, chain := createVMAndPushBlock(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.headerGetVersion(v)
|
||||
err := headerGetVersion(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().(*big.Int)
|
||||
require.Equal(t, uint64(block.Version), value.Uint64())
|
||||
|
@ -127,7 +127,7 @@ func TestHeaderGetVersion_Negative(t *testing.T) {
|
|||
context := chain.newInteropContext(trigger.Application, dao.NewSimple(storage.NewMemoryStore()), block, nil)
|
||||
v.Estack().PushVal(vm.NewBoolItem(false))
|
||||
|
||||
err := context.headerGetVersion(v)
|
||||
err := headerGetVersion(context, v)
|
||||
require.Errorf(t, err, "value is not a header or block")
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,7 @@ func TestHeaderGetConsensusData(t *testing.T) {
|
|||
v, block, context, chain := createVMAndPushBlock(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.headerGetConsensusData(v)
|
||||
err := headerGetConsensusData(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().(*big.Int)
|
||||
require.Equal(t, block.ConsensusData, value.Uint64())
|
||||
|
@ -145,7 +145,7 @@ func TestHeaderGetMerkleRoot(t *testing.T) {
|
|||
v, block, context, chain := createVMAndPushBlock(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.headerGetMerkleRoot(v)
|
||||
err := headerGetMerkleRoot(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value()
|
||||
require.Equal(t, block.MerkleRoot.BytesBE(), value)
|
||||
|
@ -155,7 +155,7 @@ func TestHeaderGetNextConsensus(t *testing.T) {
|
|||
v, block, context, chain := createVMAndPushBlock(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.headerGetNextConsensus(v)
|
||||
err := headerGetNextConsensus(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value()
|
||||
require.Equal(t, block.NextConsensus.BytesBE(), value)
|
||||
|
@ -165,7 +165,7 @@ func TestTxGetAttributes(t *testing.T) {
|
|||
v, tx, context, chain := createVMAndPushTX(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.txGetAttributes(v)
|
||||
err := txGetAttributes(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().([]vm.StackItem)
|
||||
require.Equal(t, tx.Attributes[0].Usage, value[0].Value().(*transaction.Attribute).Usage)
|
||||
|
@ -175,7 +175,7 @@ func TestTxGetInputs(t *testing.T) {
|
|||
v, tx, context, chain := createVMAndPushTX(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.txGetInputs(v)
|
||||
err := txGetInputs(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().([]vm.StackItem)
|
||||
require.Equal(t, tx.Inputs[0], *value[0].Value().(*transaction.Input))
|
||||
|
@ -185,7 +185,7 @@ func TestTxGetOutputs(t *testing.T) {
|
|||
v, tx, context, chain := createVMAndPushTX(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.txGetOutputs(v)
|
||||
err := txGetOutputs(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().([]vm.StackItem)
|
||||
require.Equal(t, tx.Outputs[0], *value[0].Value().(*transaction.Output))
|
||||
|
@ -195,7 +195,7 @@ func TestTxGetType(t *testing.T) {
|
|||
v, tx, context, chain := createVMAndPushTX(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.txGetType(v)
|
||||
err := txGetType(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().(*big.Int)
|
||||
require.Equal(t, big.NewInt(int64(tx.Type)), value)
|
||||
|
@ -205,7 +205,7 @@ func TestInvocationTxGetScript(t *testing.T) {
|
|||
v, tx, context, chain := createVMAndPushTX(t)
|
||||
defer chain.Close()
|
||||
|
||||
err := context.invocationTxGetScript(v)
|
||||
err := invocationTxGetScript(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().([]byte)
|
||||
inv := tx.Data.(*transaction.InvocationTX)
|
||||
|
@ -222,7 +222,7 @@ func TestWitnessGetVerificationScript(t *testing.T) {
|
|||
|
||||
context := chain.newInteropContext(trigger.Application, dao.NewSimple(storage.NewMemoryStore()), nil, nil)
|
||||
v.Estack().PushVal(vm.NewInteropItem(&witness))
|
||||
err := context.witnessGetVerificationScript(v)
|
||||
err := witnessGetVerificationScript(context, v)
|
||||
require.NoError(t, err)
|
||||
value := v.Estack().Pop().Value().([]byte)
|
||||
require.Equal(t, witness.VerificationScript, value)
|
||||
|
@ -243,7 +243,7 @@ func TestInputGetHash(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(&tx.Inputs[0]))
|
||||
|
||||
err := context.inputGetHash(v)
|
||||
err := inputGetHash(context, v)
|
||||
require.NoError(t, err)
|
||||
hash := v.Estack().Pop().Value()
|
||||
require.Equal(t, tx.Inputs[0].PrevHash.BytesBE(), hash)
|
||||
|
@ -254,7 +254,7 @@ func TestInputGetIndex(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(&tx.Inputs[0]))
|
||||
|
||||
err := context.inputGetIndex(v)
|
||||
err := inputGetIndex(context, v)
|
||||
require.NoError(t, err)
|
||||
index := v.Estack().Pop().Value()
|
||||
require.Equal(t, big.NewInt(int64(tx.Inputs[0].PrevIndex)), index)
|
||||
|
@ -275,7 +275,7 @@ func TestOutputGetAssetID(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(&tx.Outputs[0]))
|
||||
|
||||
err := context.outputGetAssetID(v)
|
||||
err := outputGetAssetID(context, v)
|
||||
require.NoError(t, err)
|
||||
assetID := v.Estack().Pop().Value()
|
||||
require.Equal(t, tx.Outputs[0].AssetID.BytesBE(), assetID)
|
||||
|
@ -286,7 +286,7 @@ func TestOutputGetScriptHash(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(&tx.Outputs[0]))
|
||||
|
||||
err := context.outputGetScriptHash(v)
|
||||
err := outputGetScriptHash(context, v)
|
||||
require.NoError(t, err)
|
||||
scriptHash := v.Estack().Pop().Value()
|
||||
require.Equal(t, tx.Outputs[0].ScriptHash.BytesBE(), scriptHash)
|
||||
|
@ -297,7 +297,7 @@ func TestOutputGetValue(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(&tx.Outputs[0]))
|
||||
|
||||
err := context.outputGetValue(v)
|
||||
err := outputGetValue(context, v)
|
||||
require.NoError(t, err)
|
||||
amount := v.Estack().Pop().Value()
|
||||
require.Equal(t, big.NewInt(int64(tx.Outputs[0].Amount)), amount)
|
||||
|
@ -308,7 +308,7 @@ func TestAttrGetData(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(&tx.Attributes[0]))
|
||||
|
||||
err := context.attrGetData(v)
|
||||
err := attrGetData(context, v)
|
||||
require.NoError(t, err)
|
||||
data := v.Estack().Pop().Value()
|
||||
require.Equal(t, tx.Attributes[0].Data, data)
|
||||
|
@ -319,7 +319,7 @@ func TestAttrGetUsage(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(&tx.Attributes[0]))
|
||||
|
||||
err := context.attrGetUsage(v)
|
||||
err := attrGetUsage(context, v)
|
||||
require.NoError(t, err)
|
||||
usage := v.Estack().Pop().Value()
|
||||
require.Equal(t, big.NewInt(int64(tx.Attributes[0].Usage)), usage)
|
||||
|
@ -330,7 +330,7 @@ func TestAccountGetScriptHash(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(accState))
|
||||
|
||||
err := context.accountGetScriptHash(v)
|
||||
err := accountGetScriptHash(context, v)
|
||||
require.NoError(t, err)
|
||||
hash := v.Estack().Pop().Value()
|
||||
require.Equal(t, accState.ScriptHash.BytesBE(), hash)
|
||||
|
@ -341,7 +341,7 @@ func TestAccountGetVotes(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(accState))
|
||||
|
||||
err := context.accountGetVotes(v)
|
||||
err := accountGetVotes(context, v)
|
||||
require.NoError(t, err)
|
||||
votes := v.Estack().Pop().Value().([]vm.StackItem)
|
||||
require.Equal(t, vm.NewByteArrayItem(accState.Votes[0].Bytes()), votes[0])
|
||||
|
@ -352,7 +352,7 @@ func TestContractGetScript(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(contractState))
|
||||
|
||||
err := context.contractGetScript(v)
|
||||
err := contractGetScript(context, v)
|
||||
require.NoError(t, err)
|
||||
script := v.Estack().Pop().Value()
|
||||
require.Equal(t, contractState.Script, script)
|
||||
|
@ -363,7 +363,7 @@ func TestContractIsPayable(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(contractState))
|
||||
|
||||
err := context.contractIsPayable(v)
|
||||
err := contractIsPayable(context, v)
|
||||
require.NoError(t, err)
|
||||
isPayable := v.Estack().Pop().Value()
|
||||
require.Equal(t, contractState.IsPayable(), isPayable)
|
||||
|
@ -374,7 +374,7 @@ func TestAssetGetAdmin(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetAdmin(v)
|
||||
err := assetGetAdmin(context, v)
|
||||
require.NoError(t, err)
|
||||
admin := v.Estack().Pop().Value()
|
||||
require.Equal(t, assetState.Admin.BytesBE(), admin)
|
||||
|
@ -385,7 +385,7 @@ func TestAssetGetAmount(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetAmount(v)
|
||||
err := assetGetAmount(context, v)
|
||||
require.NoError(t, err)
|
||||
amount := v.Estack().Pop().Value()
|
||||
require.Equal(t, big.NewInt(int64(assetState.Amount)), amount)
|
||||
|
@ -396,7 +396,7 @@ func TestAssetGetAssetID(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetAssetID(v)
|
||||
err := assetGetAssetID(context, v)
|
||||
require.NoError(t, err)
|
||||
assetID := v.Estack().Pop().Value()
|
||||
require.Equal(t, assetState.ID.BytesBE(), assetID)
|
||||
|
@ -407,7 +407,7 @@ func TestAssetGetAssetType(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetAssetType(v)
|
||||
err := assetGetAssetType(context, v)
|
||||
require.NoError(t, err)
|
||||
assetType := v.Estack().Pop().Value()
|
||||
require.Equal(t, big.NewInt(int64(assetState.AssetType)), assetType)
|
||||
|
@ -418,7 +418,7 @@ func TestAssetGetAvailable(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetAvailable(v)
|
||||
err := assetGetAvailable(context, v)
|
||||
require.NoError(t, err)
|
||||
available := v.Estack().Pop().Value()
|
||||
require.Equal(t, big.NewInt(int64(assetState.Available)), available)
|
||||
|
@ -429,7 +429,7 @@ func TestAssetGetIssuer(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetIssuer(v)
|
||||
err := assetGetIssuer(context, v)
|
||||
require.NoError(t, err)
|
||||
issuer := v.Estack().Pop().Value()
|
||||
require.Equal(t, assetState.Issuer.BytesBE(), issuer)
|
||||
|
@ -440,7 +440,7 @@ func TestAssetGetOwner(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetOwner(v)
|
||||
err := assetGetOwner(context, v)
|
||||
require.NoError(t, err)
|
||||
owner := v.Estack().Pop().Value()
|
||||
require.Equal(t, assetState.Owner.Bytes(), owner)
|
||||
|
@ -451,7 +451,7 @@ func TestAssetGetPrecision(t *testing.T) {
|
|||
defer chain.Close()
|
||||
v.Estack().PushVal(vm.NewInteropItem(assetState))
|
||||
|
||||
err := context.assetGetPrecision(v)
|
||||
err := assetGetPrecision(context, v)
|
||||
require.NoError(t, err)
|
||||
precision := v.Estack().Pop().Value()
|
||||
require.Equal(t, big.NewInt(int64(assetState.Precision)), precision)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue