This package has been deprecated

Author message:

This repository has been moved to @CityOfZion/neon-dappkit. Which has the same classes and methods, making migration very easy.

@cityofzion/neo3-parser
TypeScript icon, indicating that this package has built-in type declarations

1.8.1 • Public • Published

Neo3-parser - A declarative SmartContract Parsing Spec.
Made with ❤ by COZ.IO

Neo3-parser

Neo3-parser is a specification of how SmartContract client SDKs can interact with different parsing libraries such as Neon-JS.

Visit the main page of the project.

How to parse responses

After invoking a contract you'll get the results on a stack. Use the parseRpcResponse(field: RpcResponse, parseConfig?: ParseConfig) function on each result of the stack to get the results parsed.

How to use parseConfig

The parseConfig object has the following properties:

Property Description
type: string a valid ABI Type
hint?: string a type that extends from the ABI type
generic?: ParseConfig you only need to pass this prop if type is "Array"
genericKey?: ParseConfig you only need to pass this prop if type is "Map"
genericItem?: ParseConfig you only need to pass this prop if type is "Map"
union?: ParseConfig[] you only need to pass this prop if type is "Any" and you expect to get multiple types

Note: check HINT_TYPES to see what types are available to use on hint.

Example

// Simulating a result stack after invoking a contract
const stackResult = [ 
  {
    type: "ByteString",
    value: "AAECAwQFBgcICQoLDA0ODxAREhM=" // This value is a Hash160
  } 
]

// Call parseRpcResponse on an item of the stack
const response = Neo3Parser.parseRpcResponse(stackResult[0])

console.log(response) 
// Expected output: "☺☻♥♦♣♠\n♫☼►◄↕‼"

// You can use the `parseConfig` parameter to change how to parse the response
const responseHash160 = Neo3Parser.parseRpcResponse(stackResult[0], { type: "Hash160"})

console.log(responseHash160)
// Expected output: "0x131211100f0e0d0c0b0a09080706050403020100"

// Adding a hint might also change how it is parsed
const responseHash160LE = Neo3Parser.parseRpcResponse(stackResult[0], { type: "Hash160", hint: "ScriptHashLittleEndian"})

console.log(responseHash160LE)
// Expected output: "000102030405060708090a0b0c0d0e0f10111213"

Using neo3-boa to get the parseConfig

If you compiled your smart contract with Neo3-boa you can use the ABI inside the .manifest.json file as the parseConfig.

For example, compiling this smart contract will generate the following file:

{
    "name": "ManifestTypeHintFromUInt160ToScriptHashLittleEndian",
    "groups": [],
    "abi": {
        "methods": [
            {
                "name": "Main",
                "offset": 0,
                "parameters": [],
                "safe": false,
                "returntype": "Hash160",
                "returnhint": "ScriptHashLittleEndian"
            }
        ],
        "events": []
    },
    "permissions": [
        {
            "contract": "*",
            "methods": "*"
        }
    ],
    "trusts": [],
    "features": {},
    "supportedstandards": [],
    "extra": null
}

Then, you can copy the properties of the method you want to parse that have the return prefix, in this example it should be returntype and returnhint. Remove the return prefix and attribute it to a ParseConfig variable in your TypeScript file.

const parseConfigFromNeo3boa = {
  "type": "Hash160",
  "hint": "ScriptHashLittleEndian"
}

const responseHash160LE = Neo3Parser.parseRpcResponse(stackResult[0], parseConfigFromNeo3boa)

console.log(responseHash160LE)
// Expected output: "000102030405060708090a0b0c0d0e0f10111213"

Readme

Keywords

none

Package Sidebar

Install

npm i @cityofzion/neo3-parser

Weekly Downloads

14

Version

1.8.1

License

MIT

Unpacked Size

14.2 kB

Total Files

4

Last publish

Collaborators

  • ethanfast
  • hal0x2328
  • lllwvlvwlll
  • melanke
  • rockacola
  • snowypowers