forked from TrueCloudLab/neoneo-go
*: simplify some integer checks with IsUint64()
If we need a positive number we can do `IsUint64()` instead of checking that `Int64()` is `> 0`.
This commit is contained in:
parent
233307aca5
commit
5f13de3a76
6 changed files with 18 additions and 17 deletions
|
@ -219,8 +219,9 @@ func storageFind(ic *interop.Context) error {
|
|||
// given m and a set of public keys.
|
||||
func contractCreateMultisigAccount(ic *interop.Context) error {
|
||||
m := ic.VM.Estack().Pop().BigInt()
|
||||
if !m.IsInt64() || m.Int64() > math.MaxInt32 {
|
||||
return errors.New("m should fit int32")
|
||||
mu64 := m.Uint64()
|
||||
if !m.IsUint64() || mu64 > math.MaxInt32 {
|
||||
return errors.New("m must be positive and fit int32")
|
||||
}
|
||||
arr := ic.VM.Estack().Pop().Array()
|
||||
pubs := make(keys.PublicKeys, len(arr))
|
||||
|
@ -231,7 +232,7 @@ func contractCreateMultisigAccount(ic *interop.Context) error {
|
|||
}
|
||||
pubs[i] = p
|
||||
}
|
||||
script, err := smartcontract.CreateMultiSigRedeemScript(int(m.Int64()), pubs)
|
||||
script, err := smartcontract.CreateMultiSigRedeemScript(int(mu64), pubs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -157,9 +157,9 @@ func isTraceableBlock(bc blockchainer.Blockchainer, index uint32) bool {
|
|||
// be called within VM context, so it panics if anything goes wrong.
|
||||
func getBlockHashFromItem(bc blockchainer.Blockchainer, item stackitem.Item) util.Uint256 {
|
||||
bigindex, err := item.TryInteger()
|
||||
if err == nil && bigindex.IsInt64() {
|
||||
index := bigindex.Int64()
|
||||
if index < 0 || index > math.MaxUint32 {
|
||||
if err == nil && bigindex.IsUint64() {
|
||||
index := bigindex.Uint64()
|
||||
if index > math.MaxUint32 {
|
||||
panic("bad block index")
|
||||
}
|
||||
if uint32(index) > bc.BlockHeight() {
|
||||
|
|
|
@ -343,12 +343,12 @@ func toUint160(s stackitem.Item) util.Uint160 {
|
|||
|
||||
func toUint32(s stackitem.Item) uint32 {
|
||||
bigInt := toBigInt(s)
|
||||
if !bigInt.IsInt64() {
|
||||
panic("bigint is not an int64")
|
||||
if !bigInt.IsUint64() {
|
||||
panic("bigint is not an uint64")
|
||||
}
|
||||
int64Value := bigInt.Int64()
|
||||
if int64Value < 0 || int64Value > math.MaxUint32 {
|
||||
uint64Value := bigInt.Uint64()
|
||||
if uint64Value > math.MaxUint32 {
|
||||
panic("bigint does not fit into uint32")
|
||||
}
|
||||
return uint32(int64Value)
|
||||
return uint32(uint64Value)
|
||||
}
|
||||
|
|
|
@ -73,10 +73,10 @@ func (c *Contract) FromStackItem(item stackitem.Item) error {
|
|||
if !ok {
|
||||
return errors.New("UpdateCounter is not an integer")
|
||||
}
|
||||
if !bi.IsInt64() || bi.Int64() > math.MaxUint16 || bi.Int64() < 0 {
|
||||
if !bi.IsUint64() || bi.Uint64() > math.MaxUint16 {
|
||||
return errors.New("UpdateCounter not in uint16 range")
|
||||
}
|
||||
c.UpdateCounter = uint16(bi.Int64())
|
||||
c.UpdateCounter = uint16(bi.Uint64())
|
||||
bytes, err := arr[2].TryBytes()
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -41,11 +41,11 @@ func (d *Deposit) FromStackItem(it stackitem.Item) error {
|
|||
if err != nil {
|
||||
return fmt.Errorf("invalid till: %w", err)
|
||||
}
|
||||
ti64 := till.Int64()
|
||||
if !till.IsInt64() || ti64 > math.MaxUint32 || ti64 < 0 {
|
||||
tiu64 := till.Uint64()
|
||||
if !till.IsUint64() || tiu64 > math.MaxUint32 {
|
||||
return errors.New("wrong till value")
|
||||
}
|
||||
d.Amount = amount
|
||||
d.Till = uint32(ti64)
|
||||
d.Till = uint32(tiu64)
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -918,7 +918,7 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro
|
|||
case opcode.POW:
|
||||
exp := v.estack.Pop().BigInt()
|
||||
a := v.estack.Pop().BigInt()
|
||||
if ei := exp.Int64(); !exp.IsInt64() || ei > maxSHLArg || ei < 0 {
|
||||
if ei := exp.Uint64(); !exp.IsUint64() || ei > maxSHLArg {
|
||||
panic("invalid exponent")
|
||||
}
|
||||
v.estack.PushVal(new(big.Int).Exp(a, exp, nil))
|
||||
|
|
Loading…
Reference in a new issue