Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 231f7d7

Browse files
committedJan 28, 2025·
*: add DefaultInvocationScriptSize
Magical numbers are not allowed. Signed-off-by: Ekaterina Pavlova <ekt@morphbits.io>
1 parent 5e284a3 commit 231f7d7

File tree

7 files changed

+13
-9
lines changed

7 files changed

+13
-9
lines changed
 

‎pkg/core/blockchain.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2507,7 +2507,7 @@ func (bc *Blockchain) ApplyPolicyToTxSet(txes []*transaction.Transaction) []*tra
25072507
m := smartcontract.GetDefaultHonestNodeCount(curVC)
25082508
verification, _ := smartcontract.CreateDefaultMultiSigRedeemScript(bc.contracts.NEO.GetNextBlockValidatorsInternal(bc.dao))
25092509
defaultWitness = transaction.Witness{
2510-
InvocationScript: make([]byte, 66*m),
2510+
InvocationScript: make([]byte, transaction.DefaultInvocationScriptSize*m),
25112511
VerificationScript: verification,
25122512
}
25132513
bc.knownValidatorsCount.Store(curVC)

‎pkg/core/blockchain_neotest_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2241,7 +2241,7 @@ func TestBlockchain_VerifyTx(t *testing.T) {
22412241
tx.NetworkFee = netFee + // multisig witness verification price
22422242
int64(size)*bc.FeePerByte() + // fee for unsigned size
22432243
int64(sizeDelta)*bc.FeePerByte() + // fee for multisig size
2244-
66*bc.FeePerByte() + // fee for Notary signature size (66 bytes for Invocation script and 0 bytes for Verification script)
2244+
transaction.DefaultInvocationScriptSize*bc.FeePerByte() + // fee for Notary signature size (66 bytes for Invocation script and 0 bytes for Verification script)
22452245
2*bc.FeePerByte() + // fee for the length of each script in Notary witness (they are nil, so we did not take them into account during `size` calculation)
22462246
notaryServiceFeePerKey + // fee for Notary attribute
22472247
fee.Opcode(bc.GetBaseExecFee(), // Notary verification script

‎pkg/core/fee/calculate.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fee
22

33
import (
4+
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
45
"github.com/nspcc-dev/neo-go/pkg/io"
56
"github.com/nspcc-dev/neo-go/pkg/vm"
67
"github.com/nspcc-dev/neo-go/pkg/vm/emit"
@@ -21,7 +22,7 @@ func Calculate(base int64, script []byte) (int64, int) {
2122
netFee += Opcode(base, opcode.PUSHDATA1, opcode.PUSHDATA1) + base*ECDSAVerifyPrice
2223
} else if m, pubs, ok := vm.ParseMultiSigContract(script); ok {
2324
n := len(pubs)
24-
sizeInv := 66 * m
25+
sizeInv := transaction.DefaultInvocationScriptSize * m
2526
size += io.GetVarSize(sizeInv) + sizeInv + io.GetVarSize(script)
2627
netFee += calculateMultisig(base, m) + calculateMultisig(base, n)
2728
netFee += base * ECDSAVerifyPrice * int64(n)

‎pkg/core/transaction/witness.go

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ const (
1616
// MaxVerificationScript is the maximum allowed length of verification
1717
// script. It should be appropriate for 11/21 multisignature committee.
1818
MaxVerificationScript = 1024
19+
20+
// DefaultInvocationScriptSize is the default length of invocation script with one signature.
21+
DefaultInvocationScriptSize = 66
1922
)
2023

2124
// Witness contains 2 scripts.

‎pkg/network/payload/notary_request.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func (r *P2PNotaryRequest) isValid() error {
109109
if len(r.FallbackTransaction.Signers) != 2 {
110110
return errors.New("fallback transaction should have two signers")
111111
}
112-
if len(r.FallbackTransaction.Scripts[0].InvocationScript) != 66 ||
112+
if len(r.FallbackTransaction.Scripts[0].InvocationScript) != transaction.DefaultInvocationScriptSize ||
113113
len(r.FallbackTransaction.Scripts[0].VerificationScript) != 0 ||
114114
!bytes.HasPrefix(r.FallbackTransaction.Scripts[0].InvocationScript, []byte{byte(opcode.PUSHDATA1), keys.SignatureLen}) {
115115
return errors.New("fallback transaction has invalid dummy Notary witness")

‎pkg/services/notary/notary.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ func (n *Notary) verifyIncompleteWitnesses(tx *transaction.Transaction, nKeysExp
520520
}
521521
// Each verification script is allowed to have either one signature or zero signatures. If signature is provided, then need to verify it.
522522
if len(w.InvocationScript) != 0 {
523-
if len(w.InvocationScript) != 66 || !bytes.HasPrefix(w.InvocationScript, []byte{byte(opcode.PUSHDATA1), keys.SignatureLen}) {
523+
if len(w.InvocationScript) != transaction.DefaultInvocationScriptSize || !bytes.HasPrefix(w.InvocationScript, []byte{byte(opcode.PUSHDATA1), keys.SignatureLen}) {
524524
return nil, fmt.Errorf("witness #%d: invocation script should have length = 66 and be of the form [PUSHDATA1, 64, signatureBytes...]", i)
525525
}
526526
}

‎pkg/wallet/account_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ func TestContractSignTx(t *testing.T) {
131131

132132
require.NoError(t, acc2.SignTx(0, tx)) // Append script for acc2.
133133
require.Equal(t, 1, len(tx.Scripts))
134-
require.Equal(t, 66, len(tx.Scripts[0].InvocationScript))
134+
require.Equal(t, transaction.DefaultInvocationScriptSize, len(tx.Scripts[0].InvocationScript))
135135

136136
require.NoError(t, acc2.SignTx(0, tx)) // Sign again, effectively a no-op.
137137
require.Equal(t, 1, len(tx.Scripts))
138-
require.Equal(t, 66, len(tx.Scripts[0].InvocationScript))
138+
require.Equal(t, transaction.DefaultInvocationScriptSize, len(tx.Scripts[0].InvocationScript))
139139

140140
acc2.Locked = true
141141
require.False(t, acc2.CanSign())
@@ -154,12 +154,12 @@ func TestContractSignTx(t *testing.T) {
154154
VerificationScript: acc.Contract.Script,
155155
})
156156
require.NoError(t, acc.SignTx(0, tx)) // Add invocation script for existing witness.
157-
require.Equal(t, 66, len(tx.Scripts[1].InvocationScript))
157+
require.Equal(t, transaction.DefaultInvocationScriptSize, len(tx.Scripts[1].InvocationScript))
158158
require.NotNil(t, acc.SignHashable(0, tx)) // Works via Hashable too.
159159

160160
require.NoError(t, multiAcc.SignTx(0, tx))
161161
require.Equal(t, 3, len(tx.Scripts))
162-
require.Equal(t, 66, len(tx.Scripts[2].InvocationScript))
162+
require.Equal(t, transaction.DefaultInvocationScriptSize, len(tx.Scripts[2].InvocationScript))
163163

164164
require.NoError(t, multiAcc2.SignTx(0, tx)) // Append to existing script.
165165
require.Equal(t, 3, len(tx.Scripts))

0 commit comments

Comments
 (0)
Please sign in to comment.