annotatedAsset := &query.AnnotatedAsset{
ID: a.AssetID,
Alias: *a.Alias,
+ VMVersion: a.VMVersion,
RawDefinitionByte: a.RawDefinitionByte,
Definition: &jsonDefinition,
IssuanceProgram: chainjson.HexBytes(a.IssuanceProgram),
}
- annotatedAsset.LimitHeight, _ = vmutil.GetIssuanceProgramRestrictHeight(a.IssuanceProgram)
+ annotatedAsset.LimitHeight = vmutil.GetIssuanceProgramRestrictHeight(a.IssuanceProgram)
if a.Signer != nil {
annotatedAsset.AnnotatedSigner = query.AnnotatedSigner{
Type: a.Signer.Type,
case types.IssuanceInputType:
issuanceProgram := input.IssuanceProgram()
- if height, _ := vmutil.GetIssuanceProgramRestrictHeight(issuanceProgram); height > 0 {
+ if height := vmutil.GetIssuanceProgramRestrictHeight(issuanceProgram); height > 0 {
// the gas for issue program with checking block height
totalIssueGas += 5
}
}
// GetIssuanceProgramRestrictHeight return issuance program restrict height
-func GetIssuanceProgramRestrictHeight(program []byte) (int64, error) {
+// if height invalid return 0
+func GetIssuanceProgramRestrictHeight(program []byte) int64 {
insts, err := vm.ParseProgram(program)
if err != nil {
- return 0, err
+ return 0
}
if len(insts) >= 4 && insts[0].IsPushdata() && insts[1].Op == vm.OP_BLOCKHEIGHT && insts[2].Op == vm.OP_GREATERTHAN && insts[3].Op == vm.OP_VERIFY {
- return vm.AsInt64(insts[0].Data)
+ height, err := vm.AsInt64(insts[0].Data)
+ if err != nil {
+ return 0
+ }
+
+ return height
}
- return 0, nil
+ return 0
}
t.Fatal(err)
}
- gotHeight, _ := GetIssuanceProgramRestrictHeight(program)
+ gotHeight := GetIssuanceProgramRestrictHeight(program)
if gotHeight != test.wantHeight {
t.Errorf("TestGetIssuanceProgramRestrictHeight #%d failed: got %d want %d", i, gotHeight, test.wantHeight)
}