Merge pull request #1069 from nspcc-dev/addr-locking-and-other-fixes

Addr, locking and other fixes
This commit is contained in:
Roman Khimov 2020-06-18 23:29:19 +03:00 committed by GitHub
commit 93b0011988
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 19 additions and 12 deletions

View file

@ -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

View file

@ -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)

View file

@ -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,

View file

@ -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)

View file

@ -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))
} }
} }

View file

@ -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)
} }
} }

View file

@ -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")

View file

@ -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(),

Binary file not shown.