2.1.0 - This version is safe to use because it has no known security vulnerabilities at this time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform
Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.
ISC - ISC LicenseA library and stand alone assembler for aeternity bytecode.
This version supports AEVM bytecode and FATE bytecode.
$ make
Fate code exists in 3 formats:
This library handles all three representations. The byte code format is described in a separate document. The internal format is described in a separate document. The text representation is described below.
Assembler code can be read from a file. The assembler has the following format:
Comments start with 2 semicolons and runs till end of line
;; This is a comment
Opcode mnemonics start with an upper case letter.
DUP
Identifiers start with a lower case letter
an_identifier
References to function arguments start with arg followed by an integer
arg0
References to variables/registers start with var followed by an integer
var0
References to stack postions is either a (for stack 0)
or start with stack followed by an integer
stack1
a
Immediate values can be of 10 types:
Integers as decimals: {Digits} or -{Digits}
42
-2374683271468723648732648736498712634876147
And integers as Hexadecimals:: 0x{Hexdigits}
0x0deadbeef0
Chain Objects. These are all addresses to different types of chain objects. Each address is a 256 bits number encoded in base58 with checksum with a prefix of "@" plus a type prefix followed by "_".
2a. Account Address: a base58c encoded number starting with @ak_ followed by a number of base58chars '@ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv`
2b. Contract address: @ct_{base58char}+
@ct_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
2c. Oracle address: @ok_{base58char}+
@ok_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
2d. Oracle query: @oq_{base58char}+
@oq_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
2e. Channel address: @ch_{base58char}+
@ch_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
Boolean true or false
true
false
Strings "{Characters}"
"Hello"
Map { Key => Value }
{}
{ 1 => { "foo" => true, "bar" => false}
Lists [ Elements ]
[]
[1, 2]
Bit field < Bits > or !< Bits >
<000>
<1010 1010>
<>
!<>
Tuples ( Elements )
()
(1, "foo")
Variants: (| [Arities] | Tag | ( Elements ) |)
(| [1,3,5,2] | 3 | ( "foo", 12) |)
Bytes: #{base64char}+
#AQIDCioLFQ==
Contract bytearray (code of another smart contract)
@cb_+PJGA6A4Fz4T2LHV5knITCldR3rqO7HrXO2zhOAR9JWNbhf8Q8C4xbhx/gx8JckANwAXfQBVACAAAP4vhlvZADcABwECgv5E1kQfADcBBzcACwAWMBReAHMAFjBvJFMAFjBvggOoFAAUABQSggABAz/+tIwWhAA3AAdTAAD+1jB5kAQ3AAcLAAD+6MRetgA3AQc3ABoGggABAz+4TS8GEQx8JclFY2FsbGVyX2lzX2NyZWF0b3IRL4Zb2Q1nZXQRRNZEHxFpbml0EbSMFoQdYmFsYW5jZRHWMHmQFXZhbHVlEejEXrYNc2V0gi8AhTQuMy4wAUqQ8s4=
Where
Digits: [0123456789]
Hexdigits: [0123456789abcdef]
base58char: [123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]
base64char: [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy0123456789+/=]
Characters: any printable ascii character 0..255 (except " no quoting yet)
Key: any value except for a map
Bits: 01 or space
Elements: Nothing or Value , Elements
Size: Digits (0 < Size < 256)
Tag: Digits (0 =< Tag < Size)