forked from TrueCloudLab/neoneo-go
Merge pull request #1069 from nspcc-dev/addr-locking-and-other-fixes
Addr, locking and other fixes
This commit is contained in:
commit
93b0011988
9 changed files with 19 additions and 12 deletions
|
@ -396,8 +396,12 @@ func (bc *Blockchain) notificationDispatcher() {
|
||||||
// Close stops Blockchain's internal loop, syncs changes to persistent storage
|
// Close stops Blockchain's internal loop, syncs changes to persistent storage
|
||||||
// and closes it. The Blockchain is no longer functional after the call to Close.
|
// and closes it. The Blockchain is no longer functional after the call to Close.
|
||||||
func (bc *Blockchain) Close() {
|
func (bc *Blockchain) Close() {
|
||||||
|
// If there is a block addition in progress, wait for it to finish and
|
||||||
|
// don't allow new ones.
|
||||||
|
bc.addLock.Lock()
|
||||||
close(bc.stopCh)
|
close(bc.stopCh)
|
||||||
<-bc.runToExitCh
|
<-bc.runToExitCh
|
||||||
|
bc.addLock.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddBlock accepts successive block for the Blockchain, verifies it and
|
// AddBlock accepts successive block for the Blockchain, verifies it and
|
||||||
|
|
|
@ -234,7 +234,7 @@ func TestCreateBasicChain(t *testing.T) {
|
||||||
}
|
}
|
||||||
m.ABI.EntryPoint.ReturnType = smartcontract.BoolType
|
m.ABI.EntryPoint.ReturnType = smartcontract.BoolType
|
||||||
m.Features = smartcontract.HasStorage
|
m.Features = smartcontract.HasStorage
|
||||||
bs, err := testserdes.EncodeBinary(m)
|
bs, err := m.MarshalJSON()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
emit.Bytes(script.BinWriter, bs)
|
emit.Bytes(script.BinWriter, bs)
|
||||||
emit.Bytes(script.BinWriter, avm)
|
emit.Bytes(script.BinWriter, avm)
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/interop"
|
"github.com/nspcc-dev/neo-go/pkg/core/interop"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/io"
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest"
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm"
|
"github.com/nspcc-dev/neo-go/pkg/vm"
|
||||||
|
@ -76,10 +75,9 @@ func createContractStateFromVM(ic *interop.Context, v *vm.VM) (*state.Contract,
|
||||||
return nil, errGasLimitExceeded
|
return nil, errGasLimitExceeded
|
||||||
}
|
}
|
||||||
var m manifest.Manifest
|
var m manifest.Manifest
|
||||||
r := io.NewBinReaderFromBuf(manifestBytes)
|
err := m.UnmarshalJSON(manifestBytes)
|
||||||
m.DecodeBinary(r)
|
if err != nil {
|
||||||
if r.Err != nil {
|
return nil, err
|
||||||
return nil, r.Err
|
|
||||||
}
|
}
|
||||||
return &state.Contract{
|
return &state.Contract{
|
||||||
Script: script,
|
Script: script,
|
||||||
|
|
|
@ -80,6 +80,9 @@ func (g *GAS) Initialize(ic *interop.Context) error {
|
||||||
|
|
||||||
// OnPersist implements Contract interface.
|
// OnPersist implements Contract interface.
|
||||||
func (g *GAS) OnPersist(ic *interop.Context) error {
|
func (g *GAS) OnPersist(ic *interop.Context) error {
|
||||||
|
if len(ic.Block.Transactions) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
for _, tx := range ic.Block.Transactions {
|
for _, tx := range ic.Block.Transactions {
|
||||||
absAmount := big.NewInt(int64(tx.SystemFee + tx.NetworkFee))
|
absAmount := big.NewInt(int64(tx.SystemFee + tx.NetworkFee))
|
||||||
g.burn(ic, tx.Sender, absAmount)
|
g.burn(ic, tx.Sender, absAmount)
|
||||||
|
|
|
@ -125,6 +125,7 @@ func (s *NEOBalanceState) fromStackItem(item stackitem.Item) {
|
||||||
votes := structItem[2].Value().([]stackitem.Item)
|
votes := structItem[2].Value().([]stackitem.Item)
|
||||||
s.Votes = make([]*keys.PublicKey, len(votes))
|
s.Votes = make([]*keys.PublicKey, len(votes))
|
||||||
for i, v := range votes {
|
for i, v := range votes {
|
||||||
|
s.Votes[i] = new(keys.PublicKey)
|
||||||
s.Votes[i].DecodeBytes(v.Value().([]byte))
|
s.Votes[i].DecodeBytes(v.Value().([]byte))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -648,7 +648,7 @@ func (s *Server) handleTxCmd(tx *transaction.Transaction) error {
|
||||||
func (s *Server) handleAddrCmd(p Peer, addrs *payload.AddressList) error {
|
func (s *Server) handleAddrCmd(p Peer, addrs *payload.AddressList) error {
|
||||||
for _, a := range addrs.Addrs {
|
for _, a := range addrs.Addrs {
|
||||||
addr, err := a.GetTCPAddress()
|
addr, err := a.GetTCPAddress()
|
||||||
if err != nil {
|
if err == nil {
|
||||||
s.discovery.BackFill(addr)
|
s.discovery.BackFill(addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,10 @@ import (
|
||||||
// with its metadata and system fee require for this.
|
// with its metadata and system fee require for this.
|
||||||
func CreateDeploymentScript(avm []byte, manif *manifest.Manifest) ([]byte, util.Fixed8, error) {
|
func CreateDeploymentScript(avm []byte, manif *manifest.Manifest) ([]byte, util.Fixed8, error) {
|
||||||
script := io.NewBufBinWriter()
|
script := io.NewBufBinWriter()
|
||||||
w := io.NewBufBinWriter()
|
rawManifest, err := manif.MarshalJSON()
|
||||||
manif.EncodeBinary(w.BinWriter)
|
if err != nil {
|
||||||
rawManifest := w.Bytes()
|
return nil, 0, err
|
||||||
|
}
|
||||||
emit.Bytes(script.BinWriter, rawManifest)
|
emit.Bytes(script.BinWriter, rawManifest)
|
||||||
emit.Bytes(script.BinWriter, avm)
|
emit.Bytes(script.BinWriter, avm)
|
||||||
emit.Syscall(script.BinWriter, "System.Contract.Create")
|
emit.Syscall(script.BinWriter, "System.Contract.Create")
|
||||||
|
|
|
@ -51,7 +51,7 @@ type rpcTestCase struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
const testContractHash = "e65ff7b3a02d207b584a5c27057d4e9862ef01da"
|
const testContractHash = "e65ff7b3a02d207b584a5c27057d4e9862ef01da"
|
||||||
const deploymentTxHash = "5ce44eae362d3f81d440cb73cf4e4af71e69851bcd683b076aa08b7346d4e69b"
|
const deploymentTxHash = "b0428600383ec7f7b06734978a24dbe81edc87b781f58c0614f122c735d8cf6a"
|
||||||
|
|
||||||
var rpcTestCases = map[string][]rpcTestCase{
|
var rpcTestCases = map[string][]rpcTestCase{
|
||||||
"getapplicationlog": {
|
"getapplicationlog": {
|
||||||
|
@ -148,7 +148,7 @@ var rpcTestCases = map[string][]rpcTestCase{
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Asset: e.chain.UtilityTokenHash(),
|
Asset: e.chain.UtilityTokenHash(),
|
||||||
Amount: "923.96934740",
|
Amount: "923.96937740",
|
||||||
LastUpdated: 6,
|
LastUpdated: 6,
|
||||||
}},
|
}},
|
||||||
Address: testchain.PrivateKeyByID(0).GetScriptHash().StringLE(),
|
Address: testchain.PrivateKeyByID(0).GetScriptHash().StringLE(),
|
||||||
|
|
BIN
pkg/rpc/server/testdata/testblocks.acc
vendored
BIN
pkg/rpc/server/testdata/testblocks.acc
vendored
Binary file not shown.
Loading…
Reference in a new issue