Implemented rpc server method GetRawTransaction (#135)

* Added utility function GetVarSize

* 1) Added Size method: this implied that Fixed8 implements now the serializable interface. 2) Added few arithmetic operation (Add, Sub, div): this will be used to calculated networkfeeand feePerByte. Changed return value of the Value() method to int instead of int64. Modified fixed8_test accordingly.

* Implemented Size or MarshalJSON method.
- Structs accepting the Size method implement the serializable interface.
- Structs accepting the MarshalJSON method implements the customized json marshaller interface.

* Added fee calculation

* Implemented rcp server method GetRawTransaction

* Updated Tests

* Fixed:
1) NewFixed8 will accept as input int64
2) race condition affecting configDeafault, blockchainDefault

* Simplified Size calculation

* 1) Removed global variable blockchainDefault, configDefault
2) Extended Blockchainer interface to include the methods: References, FeePerByte, SystemFee, NetworkFee
3) Deleted fee_test.go, fee.go. Moved corresponding methods to blockchain_test.go and blockchain.go respectively
4) Amended tx_raw_output.go

* Simplified GetVarSize Method

* Replaced ValueAtAndType with ValueWithType

* Cosmetic changes + Added test case getrawtransaction_7

* Clean up Print statement

* Filled up keys

* Aligned verbose logic with the C#-neo implementation

* Implemented @Kim requests
Refactor server_test.go

* Small fixes

* Fixed verbose logic
Added more tests
Cosmetic changes

* Replaced assert.NoError with require.NoError

* Fixed tests by adding context.Background() as argument

* Fixed tests
This commit is contained in:
dauTT 2019-02-20 18:39:32 +01:00 committed by fabwa
parent 20bb05b335
commit 19201dcf52
23 changed files with 859 additions and 151 deletions

View file

@ -6,7 +6,10 @@ import (
"github.com/CityOfZion/neo-go/config"
"github.com/CityOfZion/neo-go/pkg/core/storage"
"github.com/CityOfZion/neo-go/pkg/core/transaction"
"github.com/CityOfZion/neo-go/pkg/util"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestAddHeaders(t *testing.T) {
@ -78,16 +81,14 @@ func TestGetHeader(t *testing.T) {
assert.Nil(t, err)
hash := block.Hash()
header, err := bc.getHeader(hash)
if err != nil {
t.Fatal(err)
}
header, err := bc.GetHeader(hash)
require.NoError(t, err)
assert.Equal(t, block.Header(), header)
block = newBlock(2)
hash = block.Hash()
_, err = bc.getHeader(hash)
assert.NotNil(t, err)
_, err = bc.GetHeader(block.Hash())
assert.Error(t, err)
}
func TestGetBlock(t *testing.T) {
@ -155,3 +156,40 @@ func newTestChain(t *testing.T) *Blockchain {
}
return chain
}
func TestSize(t *testing.T) {
txID := "f999c36145a41306c846ea80290416143e8e856559818065be3f4e143c60e43a"
tx := getTestTransaction(txID, t)
assert.Equal(t, 283, tx.Size())
assert.Equal(t, 22, util.GetVarSize(tx.Attributes))
assert.Equal(t, 35, util.GetVarSize(tx.Inputs))
assert.Equal(t, 121, util.GetVarSize(tx.Outputs))
assert.Equal(t, 103, util.GetVarSize(tx.Scripts))
}
func getTestBlockchain(t *testing.T) *Blockchain {
net := config.ModeUnitTestNet
configPath := "../../config"
cfg, err := config.Load(configPath, net)
require.NoError(t, err, "could not create levelDB chain")
// adjust datadirectory to point to the correct folder
cfg.ApplicationConfiguration.DataDirectoryPath = "../rpc/chains/unit_testnet"
chain, err := NewBlockchainLevelDB(context.Background(), cfg)
require.NoErrorf(t, err, "could not create levelDB chain")
return chain
}
func getTestTransaction(txID string, t *testing.T) *transaction.Transaction {
chain := getTestBlockchain(t)
txHash, err := util.Uint256DecodeString(txID)
require.NoErrorf(t, err, "could not decode string %s to Uint256", txID)
tx, _, err := chain.GetTransaction(txHash)
require.NoErrorf(t, err, "could not get transaction with hash=%s", txHash)
return tx
}