instor

package
v0.0.0-...-5eebaeb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2023 License: MIT Imports: 6 Imported by: 1

Documentation

Overview

Package instor 提供脚本指令的基本信息,类型定义和名称约定等。

Index

Constants

View Source
const (
	LoopValue int = iota // 值(any)
	LoopKey              // 键(int|string)
	LoopData             // 数据集(any)
	LoopSize             // 集合大小(int)
)

循环域4个成员位置标识

View Source
const (
	ItemAny    = iota // []any
	ItemByte          // Bytes
	ItemRune          // Runes
	ItemInt           // []Int
	ItemFloat         // []Float
	ItemString        // []String
)

切片成员类型支持。 栈脚本仅支持如下6种切片类型。

View Source
const (
	TypeisBool   = iota // 布尔值
	TypeisInt           // 整数
	TypeisByte          // 字节
	TypeisRune          // 字符
	TypeisFloat         // 浮点数
	TypeisTime          // 时间戳
	TypeisBigInt        // 大整数
	TypeisBytes         // 字节序列
	TypeisString        // 文本串
	TypeisRegExp        // 正则表达式
	TypeisScript        // 脚本
	TypeisNumber        // 数值(Int|Float)
	TypeisModel         // 模式区
)

类型匹配支持 for !{Type}(1)

View Source
const (
	EnvHeight      = iota // 理想块高度(按时间戳算)
	EnvTime               // 理想块时间戳
	EnvRealHeight         // 交易打包进的实际区块的高度
	EnvTxID               // 交易ID
	EnvTimestamp          // 交易时间戳
	EnvInSize             // 输入项总数
	EnvInAmout            // 输入总金额
	EnvOutSize            // 输出项总数
	EnvOutAmount          // 输出总金额
	EnvInGoto             // 是否在 GOTO 跳转的脚本中
	EnvInJump             // 是否在 JUMP 引入的脚本中
	EnvGotos              // 当前 GOTO 跳转计数
	EnvJumps              // 当前 Jump 嵌入计数
	EnvBlockHeight        // 区块链当前最新高度
	EnvBlockTime          // 当前最新区块创建的时间戳
	EnvLimitStack         // 栈高度上限(256)
	EnvLimitScope         // 局部变量域上限(128)
)

环境变量条目标识值。

View Source
const (
	OutAmount      = iota // 币金数量
	OutReceiver           // 接收者
	OutCreator            // 凭信创建者
	OutDescription        // 凭信描述
	OutCount              // 凭信转移计数
	OutTitle              // 证据标题
	OutContent            // 证据内容
	OutAttachment         // 附件ID
	OutSource             // 输出脚本引用
	OutTimestamp          // 源交易的创建时间(仅适用 INOUT)
)

脚本输出项标识值。 用于 OUT/INOUT 两个指令。

View Source
const (
	InIndex   = iota // 当前输入在输入集内的偏移(索引)
	InAmount         // 当前输入币金数量(币金类才有)
	InAccount        // 当前输入账户(公钥地址)
	InAddress        // 当前输入地址(文本地址)
	InPayType        // 当前输入的类型(币金|凭信)
	InSigs           // 当前输入已签名数量(>= 0)
	InCanSigs        // 当前输入能够签名的数量(>1时为多重签名账户)
	InSigType        // 当前输入的签名类型
	InSource         // 当前输入脚本(含解锁部分),注:INOUT/Source 为不含解锁部分
)

脚本输入项标识值。 用于 IN 指令。

View Source
const (
	XFromSource    = iota // 源脚本指令序列
	XFromOffset           // 跳转/嵌入点在源脚本中的偏移位置
	XFromInSize           // 源交易输入集大小(项数)
	XFromInAmount         // 源交易输入总金额
	XFromOutSize          // 源交易输出集大小(项数)
	XFromOutAmount        // 源交易输出总金额
	XFromTxID             // 源交易的ID
	XFromHeight           // 理想块高度
	XFromTime             // 理想块时间戳
	XFromTimestamp        // 源交易的创建时间戳
	XFromAmount           // 源输入币金数量(币金类才有)
	XFromAccount          // 源输入账户(公钥地址)
	XFromAddress          // 源输入地址(文本地址)
	XFromPayType          // 源输入的类型(币金|凭信)
)

源脚本信息成员。 注: 仅适用 GOTO/JUMP 跳转到的目标脚本。

View Source
const (
	TimeDefault     = iota // 默认(Time)
	TimeStamp              // 时间戳(毫秒数)
	TimeYear               // 年次(4)
	TimeMonth              // 月次(1-12)
	TimeYearDay            // 年日次(1-365/366)
	TimeDay                // 月日次
	TimeWeekDay            // 周日次
	TimeHour               // 时数/日(0-23)
	TimeMinute             // 分钟数/时(0-59)
	TimeSecond             // 秒数/分钟(0-59)
	TimeMillisecond        // 毫秒数/秒(0-999)
	TimeMicrosecond        // 微秒数/秒(0-999999)
)

时间成员码值定义。

View Source
const (
	HashSHA3 = iota
	HashSHA2
	HashBLAKE2
)

哈希算法标识值。

View Source
const (
	MORE_Create = iota
	MORE_Match
)

MO_RE: 正则表达式模块:方法标识值 [0-255]

View Source
const (
	MOTimeCreate = iota
)

MO_TIME: 时间模块:方法标识值 [0-255]

Variables

View Source
var EnvNames = []string{
	EnvHeight:      "Height",
	EnvTime:        "Time",
	EnvRealHeight:  "RealHeight",
	EnvTxID:        "TxID",
	EnvTimestamp:   "Timestamp",
	EnvInSize:      "InSize",
	EnvInAmout:     "InAmout",
	EnvOutSize:     "OutSize",
	EnvOutAmount:   "OutAmount",
	EnvInGoto:      "InGoto",
	EnvInJump:      "InJump",
	EnvGotos:       "Gotos",
	EnvJumps:       "Jumps",
	EnvBlockHeight: "BlockHeight",
	EnvBlockTime:   "BlockTime",
	EnvLimitStack:  "LimitStack",
	EnvLimitScope:  "LimitScope",
}

环境变量名称定义。 用于环境指令 ENV 中的目标定位。

View Source
var ExFnNames = []string{}

扩展函数集:函数名定义。

View Source
var FnXNames = []string{}

函数扩展指令:函数名定义。

View Source
var HashAlgo = []string{
	HashSHA3:   "sha3",
	HashSHA2:   "sha2",
	HashBLAKE2: "blake2",
}

哈希算法名称集。

View Source
var InNames = []string{
	InIndex:   "Index",
	InAmount:  "Amount",
	InAccount: "Account",
	InAddress: "Address",
	InPayType: "PayType",
	InSigs:    "Sigs",
	InCanSigs: "CanSigs",
	InSigType: "SigType",
	InSource:  "Source",
}

脚本输入项名称定义。

View Source
var LoopNames = []string{
	LoopValue: "Value",
	LoopKey:   "Key",
	LoopData:  "Data",
	LoopSize:  "Size",
}

循环变量名定义。 用于 ${}(1) 循环域变量引用指令。

View Source
var MOREMethod = []string{}

正则表达式模块:方法名清单。

View Source
var MOTimeMethod = []string{}

时间模块:方法名清单。

View Source
var OutNames = []string{
	OutAmount:      "Amount",
	OutReceiver:    "Receiver",
	OutCreator:     "Creator",
	OutDescription: "Description",
	OutCount:       "Count",
	OutTitle:       "Title",
	OutContent:     "Content",
	OutAttachment:  "Attachment",
	OutSource:      "Source",
	OutTimestamp:   "Timestamp",
}

脚本输出项名称定义。 用于环境指令 OUT/INOUT 中的目标条目定位。

View Source
var SliceItemNames = []string{
	ItemAny:    "any",
	ItemByte:   "Byte",
	ItemRune:   "Rune",
	ItemInt:    "Int",
	ItemFloat:  "Float",
	ItemString: "String",
}

切片成员类型名定义。 注意大小写,用于 ANYS(1) 转换。

View Source
var TimeNames = []string{
	TimeStamp:       "Stamp",
	TimeYear:        "Year",
	TimeMonth:       "Month",
	TimeYearDay:     "YearDay",
	TimeDay:         "Day",
	TimeWeekDay:     "WeekDay",
	TimeHour:        "Hour",
	TimeMinute:      "Minute",
	TimeSecond:      "Second",
	TimeMillisecond: "Millisecond",
	TimeMicrosecond: "Microsecond",
}

时间成员名称定义。 用于系统指令 SYS_TIME 中定位时间的条目。

View Source
var TypeNames = []string{
	TypeisBool:   "Bool",
	TypeisInt:    "Int",
	TypeisByte:   "Byte",
	TypeisRune:   "Rune",
	TypeisFloat:  "Float",
	TypeisTime:   "Time",
	TypeisBigInt: "BigInt",
	TypeisBytes:  "Bytes",
	TypeisString: "String",
	TypeisRegExp: "RegExp",
	TypeisScript: "Script",
	TypeisNumber: "Number",
	TypeisModel:  "Model",
}

类型匹配名称定义。 用于模式指令 !{Type}(1) 中的类型书写。

View Source
var XFromNames = []string{
	XFromSource:    "Source",
	XFromOffset:    "Offset",
	XFromInSize:    "InSize",
	XFromInAmount:  "InAmount",
	XFromOutSize:   "OutSize",
	XFromOutAmount: "OutAmount",
	XFromTxID:      "TxID",
	XFromHeight:    "Height",
	XFromTime:      "Time",
	XFromTimestamp: "Timestamp",
	XFromAmount:    "Amount",
	XFromAccount:   "Account",
	XFromAddress:   "Address",
	XFromPayType:   "PayType",
}

源脚本信息名称定义。 用于环境指令 XFROM 中定位成员目标。

Functions

func ExtSize

func ExtSize(i int) int

返回扩展指令自身占用长度。 i 为扩展模块索引(EX_INST[i])。 注: 仿模块逻辑,当前仅统一占用1字节定义。 指令本身的实现在 ../inst/instex 子包内。

func MoxSize

func MoxSize(i int) int

返回扩展模块自身占用长度。 i 为扩展模块索引(MO_X[i])。 注: 当前统一仅占用1字节用于方法索引。 指令本身的实现在 ../inst/mox 子包内。

func PrivSize

func PrivSize(i int) int

返回私有扩展自身占用的大小。 i 为私有扩展指令索引(EX_PRIV[i])。 注: 暂以直接指令扩展,因此不占用额外空间。 指令本身的实现在 ../inst/ipriv 子包内。

Types

type BigInt

type BigInt = big.Int

大整数

type Bool

type Bool = bool

布尔类型

type Byte

type Byte = byte

字节类型

type Bytes

type Bytes = []Byte

字节序列

type Float

type Float = float64

通用浮点数

type Insted

type Insted struct {
	Code int   // 指令码
	Args []any // 附参值集
	Data any   // 关联数据
	Size int   // 指令占用总长
}

指令信息包。 附参和关联数据已经解析为指令特定的类型。

func Get

func Get(code []byte) *Insted

获取指令信息包 code 为脚本指令序列,从目标指令位置开始。

type Instor

type Instor struct {
	Code int      // 指令码
	Args [][]byte // 附参值集
	Data []byte   // 关联数据
	Size int      // 指令占用总长
}

指令信息字节包。 不解析类型,提供原始字节/字节序列引用。

func Raw

func Raw(code []byte) *Instor

获取指令原始信息包 code 为脚本指令序列,从目标指令位置开始。

type Int

type Int = int64

通用整数

type Integer

type Integer interface {
	Int | Rune | Byte
}

整数类型约束。

type Itemer

type Itemer interface {
	any | Byte | Rune | Int | Float | String
}

切片成员类型约束。

type Number

type Number interface {
	Integer | Float
}

数值类型约束。

type RegExp

type RegExp = regexp.Regexp

正则表达式

type Rune

type Rune = rune

字符类型

type Runes

type Runes = []Rune

字符序列

type Script

type Script struct {
	// contains filtered or unexported fields
}

脚本对象。

func NewScript

func NewScript(b []byte) *Script

新建一个脚本。

func (*Script) Bytes

func (s *Script) Bytes() []byte

截取脚本字节序列。 从当前指令位置开始后续全部。

func (*Script) Code

func (s *Script) Code() int

获取当前指令码值。

func (*Script) End

func (s *Script) End() bool

是否抵达末尾。

func (*Script) New

func (s *Script) New() *Script

创建一个副本。 注:保留内部的偏移量值。

func (*Script) Next

func (s *Script) Next(n int)

步进一个指令。

func (*Script) Offset

func (s *Script) Offset() int

获取当前偏移量。

func (*Script) Past

func (s *Script) Past() []byte

获取执行过的代码。

func (*Script) PastNull

func (s *Script) PastNull() []byte

获取执行过的代码,但从NULL点开始算。 注:SYS_NULL => SOURCE 专用。

func (*Script) PostNull

func (s *Script) PostNull()

设置NULL点。 将当前内部偏移值设置为NULL点。 注:SYS_NULL 指令专用。

func (*Script) Reset

func (s *Script) Reset()

脚本重置。 内部游标归零,并返回原始引用。

func (*Script) Source

func (s *Script) Source() []byte

获取原始字节序列。

func (*Script) SourceNull

func (s *Script) SourceNull() []byte

获取原始字节序列,从NULL点开始。

type String

type String = string

文本串

type Time

type Time = time.Time

时间类型

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL