@aeternity/aepp-sdk
Version:
SDK for the æternity blockchain
1,377 lines (1,296 loc) • 52.3 kB
JavaScript
/**
* Transaction Schema for TxBuilder
* @module @aeternity/aepp-sdk/es/tx/builder/schema
* @export TxSchema
* @example import { SCHEMA } from '@aeternity/aepp-sdk'
*/
// # RLP version number
// # https://github.com/aeternity/protocol/blob/master/serializations.md#binary-serialization
import BigNumber from 'bignumber.js'
export const VSN = 1
export const VSN_2 = 2
// # TRANSACTION DEFAULT TTL
export const TX_TTL = 0
// # ORACLE
export const QUERY_FEE = 30000
export const ORACLE_TTL = { type: 'delta', value: 500 }
export const QUERY_TTL = { type: 'delta', value: 10 }
export const RESPONSE_TTL = { type: 'delta', value: 10 }
// # CONTRACT
export const DEPOSIT = 0
export const AMOUNT = 0
export const GAS = 1600000 - 21000
export const MIN_GAS_PRICE = 1e9
export const MAX_AUTH_FUN_GAS = 50000
export const DRY_RUN_ACCOUNT = { pub: 'ak_11111111111111111111111111111111273Yts', amount: '100000000000000000000000000000000000' }
// # AENS
export const NAME_TTL = 50000
// # max number of block into the future that the name is going to be available
// # https://github.com/aeternity/protocol/blob/epoch-v0.22.0/AENS.md#update
// # https://github.com/aeternity/protocol/blob/44a93d3aab957ca820183c3520b9daf6b0fedff4/AENS.md#aens-entry
export const NAME_MAX_TTL = 36000
export const NAME_MAX_CLIENT_TTL = 84600
export const CLIENT_TTL = NAME_MAX_CLIENT_TTL
export const NAME_FEE = 0
// # see https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L67
export const NAME_FEE_MULTIPLIER = 100000000000000
export const NAME_FEE_BID_INCREMENT = 0.05 // # the increment is in percentage
// # see https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L272
export const NAME_BID_TIMEOUT_BLOCKS = 480 // # ~1 day
export const NAME_BID_MAX_LENGTH = 12 // # this is the max length for a domain to be part of a bid
export const NAME_ID_KEY = {
ak: 'account_pubkey',
ok: 'oracle_pubkey',
ct: 'contract_pubkey',
ch: 'channel'
}
// # ref: https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L290
// # bid ranges:
export const NAME_BID_RANGES = {
31: BigNumber(3).times(NAME_FEE_MULTIPLIER),
30: BigNumber(5).times(NAME_FEE_MULTIPLIER),
29: BigNumber(8).times(NAME_FEE_MULTIPLIER),
28: BigNumber(13).times(NAME_FEE_MULTIPLIER),
27: BigNumber(21).times(NAME_FEE_MULTIPLIER),
26: BigNumber(34).times(NAME_FEE_MULTIPLIER),
25: BigNumber(55).times(NAME_FEE_MULTIPLIER),
24: BigNumber(89).times(NAME_FEE_MULTIPLIER),
23: BigNumber(144).times(NAME_FEE_MULTIPLIER),
22: BigNumber(233).times(NAME_FEE_MULTIPLIER),
21: BigNumber(377).times(NAME_FEE_MULTIPLIER),
20: BigNumber(610).times(NAME_FEE_MULTIPLIER),
19: BigNumber(987).times(NAME_FEE_MULTIPLIER),
18: BigNumber(1597).times(NAME_FEE_MULTIPLIER),
17: BigNumber(2584).times(NAME_FEE_MULTIPLIER),
16: BigNumber(4181).times(NAME_FEE_MULTIPLIER),
15: BigNumber(6765).times(NAME_FEE_MULTIPLIER),
14: BigNumber(10946).times(NAME_FEE_MULTIPLIER),
13: BigNumber(17711).times(NAME_FEE_MULTIPLIER),
12: BigNumber(28657).times(NAME_FEE_MULTIPLIER),
11: BigNumber(46368).times(NAME_FEE_MULTIPLIER),
10: BigNumber(75025).times(NAME_FEE_MULTIPLIER),
9: BigNumber(121393).times(NAME_FEE_MULTIPLIER),
8: BigNumber(196418).times(NAME_FEE_MULTIPLIER),
7: BigNumber(317811).times(NAME_FEE_MULTIPLIER),
6: BigNumber(514229).times(NAME_FEE_MULTIPLIER),
5: BigNumber(832040).times(NAME_FEE_MULTIPLIER),
4: BigNumber(1346269).times(NAME_FEE_MULTIPLIER),
3: BigNumber(2178309).times(NAME_FEE_MULTIPLIER),
2: BigNumber(3524578).times(NAME_FEE_MULTIPLIER),
1: BigNumber(5702887).times(NAME_FEE_MULTIPLIER)
}
// # ref: https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L273
// # name bid timeouts
export const NAME_BID_TIMEOUTS = {
13: BigNumber(0),
12: BigNumber(NAME_BID_TIMEOUT_BLOCKS), // # 480 blocks
8: BigNumber(31).times(NAME_BID_TIMEOUT_BLOCKS), // # 14880 blocks
4: BigNumber(62).times(NAME_BID_TIMEOUT_BLOCKS) // # 29760 blocks
}
// # Tag constant for ids (type uint8)
// # see https://github.com/aeternity/protocol/blob/master/serializations.md#the-id-type
// # <<Tag:1/unsigned-integer-unit:8, Hash:32/binary-unit:8>>
const ID_TAG_ACCOUNT = 1
const ID_TAG_NAME = 2
const ID_TAG_COMMITMENT = 3
const ID_TAG_ORACLE = 4
const ID_TAG_CONTRACT = 5
const ID_TAG_CHANNEL = 6
// # OBJECT tags
// # see https://github.com/aeternity/protocol/blob/master/serializations.md#binary-serialization
const OBJECT_TAG_ACCOUNT = 10
export const OBJECT_TAG_SIGNED_TRANSACTION = 11
const OBJECT_TAG_SPEND_TRANSACTION = 12
const OBJECT_TAG_ORACLE_REGISTER_TRANSACTION = 22
const OBJECT_TAG_ORACLE_QUERY_TRANSACTION = 23
const OBJECT_TAG_ORACLE_RESPONSE_TRANSACTION = 24
const OBJECT_TAG_ORACLE_EXTEND_TRANSACTION = 25
const OBJECT_TAG_NAME_SERVICE_CLAIM_TRANSACTION = 32
const OBJECT_TAG_NAME_SERVICE_PRECLAIM_TRANSACTION = 33
const OBJECT_TAG_NAME_SERVICE_UPDATE_TRANSACTION = 34
const OBJECT_TAG_NAME_SERVICE_REVOKE_TRANSACTION = 35
const OBJECT_TAG_NAME_SERVICE_TRANSFER_TRANSACTION = 36
const OBJECT_TAG_CONTRACT = 40
const OBJECT_TAG_CONTRACT_CALL = 41
const OBJECT_TAG_CONTRACT_CREATE_TRANSACTION = 42
const OBJECT_TAG_CONTRACT_CALL_TRANSACTION = 43
const OBJECT_TAG_CHANNEL_CREATE_TX = 50
const OBJECT_TAG_CHANNEL_DEPOSIT_TX = 51
const OBJECT_TAG_CHANNEL_WITHRAW_TX = 52
const OBJECT_TAG_CHANNEL_CLOSE_MUTUAL_TX = 53
const OBJECT_TAG_CHANNEL_CLOSE_SOLO_TX = 54
const OBJECT_TAG_CHANNEL_SLASH_TX = 55
const OBJECT_TAG_CHANNEL_SETTLE_TX = 56
const OBJECT_TAG_CHANNEL_FORCE_PROGRESS_TX = 521
const OBJECT_TAG_CHANNEL_OFFCHAIN_TX = 57
const OBJECT_TAG_CHANNEL = 58
const OBJECT_TAG_CHANNEL_SNAPSHOT_SOLO_TX = 59
const OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX = 570
const OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX = 571
const OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX = 572
const OBJECT_TAG_CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX = 573
const OBJECT_TAG_CHANNEL_OFFCHAIN_CALL_CONTRACT_TX = 574
const OBJECT_TAG_CHANNEL_RECONNECT_TX = 575
const OBJECT_TAG_PROOF_OF_INCLUSION = 60
const OBJECT_TAG_STATE_TREES = 62
const OBJECT_TAG_MERKLE_PATRICIA_TREE = 63
const OBJECT_TAG_MERKLE_PATRICIA_TREE_VALUE = 64
const OBJECT_TAG_CONTRACTS_TREE = 621
const OBJECT_TAG_CONTRACT_CALLS_TREE = 622
const OBJECT_TAG_CHANNELS_TREE = 623
const OBJECT_TAG_NAMESERVICE_TREE = 624
const OBJECT_TAG_ORACLES_TREE = 625
const OBJECT_TAG_ACCOUNTS_TREE = 626
const OBJECT_TAG_GA_ATTACH = 80
const OBJECT_TAG_GA_META = 81
const OBJECT_TAG_SOPHIA_BYTE_CODE = 70
const TX_FIELD = (name, type, prefix) => [name, type, prefix]
const TX_SCHEMA_FIELD = (schema, objectId) => [schema, objectId]
const revertObject = (obj) => Object.entries(obj).reduce((acc, [key, v]) => (acc[v] = key) && acc, {})
/**
* @constant
* @description Object with transaction types
* @alias module:@aeternity/aepp-sdk/es/tx/builder/schema
* @property {String} signed
* @property {String} spend
* @property {String} nameClaim
* @property {String} namePreClaim
* @property {String} nameUpdate
* @property {String} nameRevoke
* @property {String} nameTransfer
* @property {String} contractCreate
* @property {String} contractCall
* @property {String} oracleRegister
* @property {String} oracleExtend
* @property {String} oracleQuery
* @property {String} oracleResponse
*/
export const TX_TYPE = {
account: 'account',
signed: 'signedTx',
spend: 'spendTx',
// AENS
nameClaim: 'nameClaimTx',
namePreClaim: 'namePreClaimTx',
nameUpdate: 'nameUpdateTx',
nameRevoke: 'nameRevokeTx',
nameTransfer: 'nameTransfer',
// CONTRACT
contract: 'contract',
contractCreate: 'contractCreateTx',
contractCall: 'contractCallTx',
contractCallResult: 'contractCallResult',
// ORACLE
oracleRegister: 'oracleRegister',
oracleExtend: 'oracleExtend',
oracleQuery: 'oracleQuery',
oracleResponse: 'oracleResponse',
// STATE CHANNEL
channelCreate: 'channelCreate',
channelCloseMutual: 'channelCloseMutual',
channelCloseSolo: 'channelCloseSolo',
channelSlash: 'channelSlash',
channelDeposit: 'channelDeposit',
channelWithdraw: 'channelWithdraw',
channelSettle: 'channelSettle',
channelOffChain: 'channelOffChain',
channelForceProgress: 'channelForceProgress',
channel: 'channel',
channelSnapshotSolo: 'channelSnapshotSolo',
channelOffChainUpdateTransfer: 'channelOffChainUpdateTransfer',
channelOffChainUpdateDeposit: 'channelOffChainUpdateDeposit',
channelOffChainUpdateWithdrawal: 'channelOffChainUpdateWithdrawal',
channelOffChainCreateContract: 'channelOffChainCreateContract',
channelOffChainCallContract: 'channelOffChainCallContract',
channelReconnect: 'channelReconnect',
proofOfInclusion: 'proofOfInclusion',
stateTrees: 'stateTrees',
merklePatriciaTree: 'merklePatriciaTree',
merklePatriciaTreeValue: 'merklePatriciaTreeValue',
contractsTree: 'contractsTree',
contractCallsTree: 'contractCallsTree',
channelsTree: 'channelsTree',
nameserviceTree: 'nameserviceTree',
oraclesTree: 'oraclesTree',
accountsTree: 'accountsTree',
// GA ACCOUNTS
gaAttach: 'gaAttach',
gaMeta: 'gaMeta',
sophiaByteCode: 'sophiaByteCode'
}
// # see https://github.com/aeternity/protocol/blob/minerva/contracts/contract_vms.md#virtual-machines-on-the-%C3%A6ternity-blockchain
export const VM_VERSIONS = {
NO_VM: 0,
SOPHIA: 1,
SOLIDITY: 2,
SOPHIA_IMPROVEMENTS_MINERVA: 3,
SOPHIA_IMPROVEMENTS_FORTUNA: 4,
FATE: 5,
SOPHIA_IMPROVEMENTS_LIMA: 6,
FATE_2: 7
}
// # see https://github.com/aeternity/protocol/blob/minerva/contracts/contract_vms.md#virtual-machines-on-the-%C3%A6ternity-blockchain
export const ABI_VERSIONS = {
NO_ABI: 0,
SOPHIA: 1,
SOLIDITY: 2,
FATE: 3
}
export const PROTOCOL_VERSIONS = {
ROMA: 1,
MINERVA: 2,
FORTUNA: 3,
LIMA: 4,
IRIS: 5
}
// First abi/vm by default
export const PROTOCOL_VM_ABI = {
[PROTOCOL_VERSIONS.ROMA]: {
[TX_TYPE.contractCreate]: {
vmVersion: [VM_VERSIONS.SOPHIA], abiVersion: [ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.contractCall]: {
vmVersion: [VM_VERSIONS.SOPHIA], abiVersion: [ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.oracleRegister]: {
vmVersion: [VM_VERSIONS.SOPHIA], abiVersion: [ABI_VERSIONS.NO_ABI, ABI_VERSIONS.SOPHIA]
}
},
[PROTOCOL_VERSIONS.MINERVA]: {
[TX_TYPE.contractCreate]: {
vmVersion: [VM_VERSIONS.SOPHIA_IMPROVEMENTS_MINERVA], abiVersion: [ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.contractCall]: {
vmVersion: [VM_VERSIONS.SOPHIA_IMPROVEMENTS_MINERVA, VM_VERSIONS.SOPHIA],
abiVersion: [ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.oracleRegister]: {
vmVersion: [VM_VERSIONS.SOPHIA_IMPROVEMENTS_MINERVA],
abiVersion: [ABI_VERSIONS.NO_ABI, ABI_VERSIONS.SOPHIA]
}
},
[PROTOCOL_VERSIONS.FORTUNA]: {
[TX_TYPE.contractCreate]: {
vmVersion: [VM_VERSIONS.SOPHIA_IMPROVEMENTS_FORTUNA], abiVersion: [ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.contractCall]: {
vmVersion: [
VM_VERSIONS.SOPHIA_IMPROVEMENTS_FORTUNA,
VM_VERSIONS.SOPHIA,
VM_VERSIONS.SOPHIA_IMPROVEMENTS_MINERVA
],
abiVersion: [ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.oracleRegister]: {
vmVersion: [], abiVersion: [ABI_VERSIONS.NO_ABI, ABI_VERSIONS.SOPHIA]
}
},
[PROTOCOL_VERSIONS.LIMA]: {
[TX_TYPE.contractCreate]: {
vmVersion: [VM_VERSIONS.FATE, VM_VERSIONS.SOPHIA_IMPROVEMENTS_LIMA],
abiVersion: [ABI_VERSIONS.FATE, ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.contractCall]: {
vmVersion: [
VM_VERSIONS.FATE,
VM_VERSIONS.SOPHIA_IMPROVEMENTS_LIMA,
VM_VERSIONS.SOPHIA_IMPROVEMENTS_FORTUNA,
VM_VERSIONS.SOPHIA,
VM_VERSIONS.SOPHIA_IMPROVEMENTS_MINERVA
],
abiVersion: [ABI_VERSIONS.FATE, ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.oracleRegister]: {
vmVersion: [], abiVersion: [ABI_VERSIONS.NO_ABI, ABI_VERSIONS.SOPHIA]
}
},
[PROTOCOL_VERSIONS.IRIS]: {
[TX_TYPE.contractCreate]: {
vmVersion: [VM_VERSIONS.FATE_2], abiVersion: [ABI_VERSIONS.FATE]
},
// TODO: Ensure that AEVM is still available here
[TX_TYPE.contractCall]: {
vmVersion: [
VM_VERSIONS.FATE_2,
VM_VERSIONS.FATE,
VM_VERSIONS.SOPHIA_IMPROVEMENTS_LIMA,
VM_VERSIONS.SOPHIA_IMPROVEMENTS_FORTUNA,
VM_VERSIONS.SOPHIA,
VM_VERSIONS.SOPHIA_IMPROVEMENTS_MINERVA
],
abiVersion: [ABI_VERSIONS.FATE, ABI_VERSIONS.SOPHIA]
},
[TX_TYPE.oracleRegister]: {
vmVersion: [], abiVersion: [ABI_VERSIONS.NO_ABI, ABI_VERSIONS.SOPHIA]
}
}
}
export const OBJECT_ID_TX_TYPE = {
[OBJECT_TAG_ACCOUNT]: TX_TYPE.account,
[OBJECT_TAG_SIGNED_TRANSACTION]: TX_TYPE.signed,
[OBJECT_TAG_SPEND_TRANSACTION]: TX_TYPE.spend,
// AENS
[OBJECT_TAG_NAME_SERVICE_CLAIM_TRANSACTION]: TX_TYPE.nameClaim,
[OBJECT_TAG_NAME_SERVICE_PRECLAIM_TRANSACTION]: TX_TYPE.namePreClaim,
[OBJECT_TAG_NAME_SERVICE_UPDATE_TRANSACTION]: TX_TYPE.nameUpdate,
[OBJECT_TAG_NAME_SERVICE_REVOKE_TRANSACTION]: TX_TYPE.nameRevoke,
[OBJECT_TAG_NAME_SERVICE_TRANSFER_TRANSACTION]: TX_TYPE.nameTransfer,
// CONTRACT
[OBJECT_TAG_CONTRACT]: TX_TYPE.contract,
[OBJECT_TAG_CONTRACT_CREATE_TRANSACTION]: TX_TYPE.contractCreate,
[OBJECT_TAG_CONTRACT_CALL_TRANSACTION]: TX_TYPE.contractCall,
[OBJECT_TAG_CONTRACT_CALL]: TX_TYPE.contractCallResult,
// ORACLE
[OBJECT_TAG_ORACLE_REGISTER_TRANSACTION]: TX_TYPE.oracleRegister,
[OBJECT_TAG_ORACLE_EXTEND_TRANSACTION]: TX_TYPE.oracleExtend,
[OBJECT_TAG_ORACLE_QUERY_TRANSACTION]: TX_TYPE.oracleQuery,
[OBJECT_TAG_ORACLE_RESPONSE_TRANSACTION]: TX_TYPE.oracleResponse,
// STATE CHANNEL
[OBJECT_TAG_CHANNEL_CREATE_TX]: TX_TYPE.channelCreate,
[OBJECT_TAG_CHANNEL_CLOSE_MUTUAL_TX]: TX_TYPE.channelCloseMutual,
[OBJECT_TAG_CHANNEL_CLOSE_SOLO_TX]: TX_TYPE.channelCloseSolo,
[OBJECT_TAG_CHANNEL_SLASH_TX]: TX_TYPE.channelSlash,
[OBJECT_TAG_CHANNEL_FORCE_PROGRESS_TX]: TX_TYPE.channelForceProgress,
[OBJECT_TAG_CHANNEL_DEPOSIT_TX]: TX_TYPE.channelDeposit,
[OBJECT_TAG_CHANNEL_WITHRAW_TX]: TX_TYPE.channelWithdraw,
[OBJECT_TAG_CHANNEL_SETTLE_TX]: TX_TYPE.channelSettle,
[OBJECT_TAG_CHANNEL_OFFCHAIN_TX]: TX_TYPE.channelOffChain,
[OBJECT_TAG_CHANNEL]: TX_TYPE.channel,
[OBJECT_TAG_CHANNEL_SNAPSHOT_SOLO_TX]: TX_TYPE.channelSnapshotSolo,
[OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX]: TX_TYPE.channelOffChainUpdateTransfer,
[OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX]: TX_TYPE.channelOffChainUpdateDeposit,
[OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX]: TX_TYPE.channelOffChainUpdateWithdrawal,
[OBJECT_TAG_CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX]: TX_TYPE.channelOffChainCreateContract,
[OBJECT_TAG_CHANNEL_OFFCHAIN_CALL_CONTRACT_TX]: TX_TYPE.channelOffChainCallContract,
[OBJECT_TAG_CHANNEL_RECONNECT_TX]: TX_TYPE.channelReconnect,
[OBJECT_TAG_PROOF_OF_INCLUSION]: TX_TYPE.proofOfInclusion,
[OBJECT_TAG_STATE_TREES]: TX_TYPE.stateTrees,
[OBJECT_TAG_MERKLE_PATRICIA_TREE]: TX_TYPE.merklePatriciaTree,
[OBJECT_TAG_MERKLE_PATRICIA_TREE_VALUE]: TX_TYPE.merklePatriciaTreeValue,
[OBJECT_TAG_CONTRACTS_TREE]: TX_TYPE.contractsTree,
[OBJECT_TAG_CONTRACT_CALLS_TREE]: TX_TYPE.contractCallsTree,
[OBJECT_TAG_CHANNELS_TREE]: TX_TYPE.channelsTree,
[OBJECT_TAG_NAMESERVICE_TREE]: TX_TYPE.nameserviceTree,
[OBJECT_TAG_ORACLES_TREE]: TX_TYPE.oraclesTree,
[OBJECT_TAG_ACCOUNTS_TREE]: TX_TYPE.accountsTree,
// GA Accounts
[OBJECT_TAG_GA_ATTACH]: TX_TYPE.gaAttach,
[OBJECT_TAG_GA_META]: TX_TYPE.gaMeta,
[OBJECT_TAG_SOPHIA_BYTE_CODE]: TX_TYPE.sophiaByteCode
}
export const FIELD_TYPES = {
int: 'int',
amount: 'amount',
id: 'id',
ids: 'ids',
string: 'string',
binary: 'binary',
rlpBinary: 'rlpBinary',
rlpBinaries: 'rlpBinaries',
rawBinary: 'rawBinary',
bool: 'bool',
hex: 'hex',
signatures: 'signatures',
pointers: 'pointers',
offChainUpdates: 'offChainUpdates',
callStack: 'callStack',
proofOfInclusion: 'proofOfInclusion',
mptrees: 'mptrees',
callReturnType: 'callReturnType',
ctVersion: 'ctVersion',
sophiaCodeTypeInfo: 'sophiaCodeTypeInfo',
payload: 'payload',
any: 'any',
stateTree: 'stateTree'
}
// FEE CALCULATION
export const BASE_GAS = 15000
export const GAS_PER_BYTE = 20
export const DEFAULT_FEE = 20000
export const KEY_BLOCK_INTERVAL = 3
// MAP WITH FEE CALCULATION https://github.com/aeternity/protocol/blob/master/consensus/consensus.md#gas
export const TX_FEE_BASE_GAS = (txType) => {
switch (txType) {
// case TX_TYPE.gaMeta: // TODO investigate MetaTx calculation
case TX_TYPE.gaAttach:
case TX_TYPE.contractCreate:
return BigNumber(5 * BASE_GAS)
// Todo Implement meta tx fee calculation
case TX_TYPE.gaMeta:
case TX_TYPE.contractCall:
return BigNumber(12 * BASE_GAS)
default:
return BigNumber(BASE_GAS)
}
}
export const TX_FEE_OTHER_GAS = (txType) => ({ txSize, relativeTtl }) => {
switch (txType) {
case TX_TYPE.oracleRegister:
case TX_TYPE.oracleExtend:
case TX_TYPE.oracleQuery:
case TX_TYPE.oracleResponse:
return BigNumber(txSize)
.times(GAS_PER_BYTE)
.plus(
Math.ceil(32000 * relativeTtl / Math.floor(60 * 24 * 365 / KEY_BLOCK_INTERVAL))
)
default:
return BigNumber(txSize).times(GAS_PER_BYTE)
}
}
export const ID_TAG = {
account: ID_TAG_ACCOUNT,
name: ID_TAG_NAME,
commitment: ID_TAG_COMMITMENT,
oracle: ID_TAG_ORACLE,
contract: ID_TAG_CONTRACT,
channel: ID_TAG_CHANNEL
}
export const PREFIX_ID_TAG = {
ak: ID_TAG.account,
nm: ID_TAG.name,
cm: ID_TAG.commitment,
ok: ID_TAG.oracle,
ct: ID_TAG.contract,
ch: ID_TAG.channel
}
export const ID_TAG_PREFIX = revertObject(PREFIX_ID_TAG)
const VALIDATION_ERROR = (msg) => msg
export const VALIDATION_MESSAGE = {
[FIELD_TYPES.int]: ({ value, isMinusValue }) => isMinusValue ? VALIDATION_ERROR(`${value} must be >= 0`) : VALIDATION_ERROR(`${value} is not of type Number or BigNumber`),
[FIELD_TYPES.amount]: ({ value, isMinusValue }) => isMinusValue ? VALIDATION_ERROR(`${value} must be >= 0`) : VALIDATION_ERROR(`${value} is not of type Number or BigNumber`),
[FIELD_TYPES.id]: ({ value, prefix }) => VALIDATION_ERROR(`'${value}' prefix doesn't match expected prefix '${prefix}' or ID_TAG for prefix not found`),
[FIELD_TYPES.binary]: ({ prefix, value }) => VALIDATION_ERROR(`'${value}' prefix doesn't match expected prefix '${prefix}'`),
[FIELD_TYPES.string]: ({ value }) => VALIDATION_ERROR('Not a string'),
[FIELD_TYPES.pointers]: ({ value }) => VALIDATION_ERROR('Value must be of type Array and contains only object\'s like \'{key: "account_pubkey", id: "ak_lkamsflkalsdalksdlasdlasdlamd"}\''),
[FIELD_TYPES.ctVersion]: ({ value }) => VALIDATION_ERROR('Value must be an object with "vmVersion" and "abiVersion" fields')
}
const BASE_TX = [
TX_FIELD('tag', FIELD_TYPES.int),
TX_FIELD('VSN', FIELD_TYPES.int)
]
const ACCOUNT_TX = [
...BASE_TX,
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('balance', FIELD_TYPES.int)
]
export const CONTRACT_BYTE_CODE_LIMA = [
...BASE_TX,
TX_FIELD('sourceCodeHash', FIELD_TYPES.rawBinary),
TX_FIELD('typeInfo', FIELD_TYPES.sophiaCodeTypeInfo),
TX_FIELD('byteCode', FIELD_TYPES.rawBinary),
TX_FIELD('compilerVersion', FIELD_TYPES.string),
TX_FIELD('payable', FIELD_TYPES.bool)
]
export const CONTRACT_BYTE_CODE_MINERVA = [
...BASE_TX,
TX_FIELD('sourceCodeHash', FIELD_TYPES.rawBinary),
TX_FIELD('typeInfo', FIELD_TYPES.sophiaCodeTypeInfo),
TX_FIELD('byteCode', FIELD_TYPES.rawBinary),
TX_FIELD('compilerVersion', FIELD_TYPES.string)
]
export const CONTRACT_BYTE_CODE_ROMA = [
...BASE_TX,
TX_FIELD('sourceCodeHash', FIELD_TYPES.rawBinary),
TX_FIELD('typeInfo', FIELD_TYPES.sophiaCodeTypeInfo),
TX_FIELD('byteCode', FIELD_TYPES.rawBinary)
]
const ACCOUNT_TX_2 = [
...BASE_TX,
TX_FIELD('flags', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('balance', FIELD_TYPES.int),
TX_FIELD('gaContract', FIELD_TYPES.id, ['ct', 'nm']),
TX_FIELD('gaAuthFun', FIELD_TYPES.binary, 'cb')
]
const SPEND_TX = [
...BASE_TX,
TX_FIELD('senderId', FIELD_TYPES.id, 'ak'),
TX_FIELD('recipientId', FIELD_TYPES.id, ['ak', 'nm']),
TX_FIELD('amount', FIELD_TYPES.amount),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('payload', FIELD_TYPES.payload)
]
const SIGNED_TX = [
...BASE_TX,
TX_FIELD('signatures', FIELD_TYPES.signatures),
TX_FIELD('encodedTx', FIELD_TYPES.rlpBinary)
]
const NAME_PRE_CLAIM_TX = [
...BASE_TX,
TX_FIELD('accountId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('commitmentId', FIELD_TYPES.id, 'cm'),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const NAME_CLAIM_TX = [
...BASE_TX,
TX_FIELD('accountId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('name', FIELD_TYPES.binary, 'nm'),
TX_FIELD('nameSalt', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const NAME_CLAIM_TX_2 = [
...BASE_TX,
TX_FIELD('accountId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('name', FIELD_TYPES.binary, 'nm'),
TX_FIELD('nameSalt', FIELD_TYPES.int),
TX_FIELD('nameFee', FIELD_TYPES.amount),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const NAME_UPDATE_TX = [
...BASE_TX,
TX_FIELD('accountId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('nameId', FIELD_TYPES.id, 'nm'),
TX_FIELD('nameTtl', FIELD_TYPES.int),
TX_FIELD('pointers', FIELD_TYPES.pointers),
TX_FIELD('clientTtl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const NAME_TRANSFER_TX = [
...BASE_TX,
TX_FIELD('accountId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('nameId', FIELD_TYPES.id, 'nm'),
TX_FIELD('recipientId', FIELD_TYPES.id, ['ak', 'nm']),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const NAME_REVOKE_TX = [
...BASE_TX,
TX_FIELD('accountId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('nameId', FIELD_TYPES.id, 'nm'),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const CONTRACT_TX = [
...BASE_TX,
TX_FIELD('owner', FIELD_TYPES.id, 'ak'),
TX_FIELD('ctVersion', FIELD_TYPES.int),
TX_FIELD('code', FIELD_TYPES.binary, 'cb'),
TX_FIELD('log', FIELD_TYPES.binary, 'cb'),
TX_FIELD('active', FIELD_TYPES.bool),
TX_FIELD('referers', FIELD_TYPES.ids, 'ak'),
TX_FIELD('deposit', FIELD_TYPES.amount)
]
const GA_ATTACH_TX = [
...BASE_TX,
TX_FIELD('ownerId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('code', FIELD_TYPES.binary, 'cb'),
TX_FIELD('authFun', FIELD_TYPES.rawBinary),
TX_FIELD('ctVersion', FIELD_TYPES.ctVersion),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('gas', FIELD_TYPES.int),
TX_FIELD('gasPrice', FIELD_TYPES.int),
TX_FIELD('callData', FIELD_TYPES.binary, 'cb')
]
const GA_META_TX = [
...BASE_TX,
TX_FIELD('gaId', FIELD_TYPES.id, 'ak'),
TX_FIELD('authData', FIELD_TYPES.binary, 'cb'),
TX_FIELD('abiVersion', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('gas', FIELD_TYPES.int),
TX_FIELD('gasPrice', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('tx', FIELD_TYPES.rlpBinary)
]
const GA_META_TX_2 = [
...BASE_TX,
TX_FIELD('gaId', FIELD_TYPES.id, 'ak'),
TX_FIELD('authData', FIELD_TYPES.binary, 'cb'),
TX_FIELD('abiVersion', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('gas', FIELD_TYPES.int),
TX_FIELD('gasPrice', FIELD_TYPES.int),
TX_FIELD('tx', FIELD_TYPES.rlpBinary)
]
const CONTRACT_CREATE_TX = [
...BASE_TX,
TX_FIELD('ownerId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('code', FIELD_TYPES.binary, 'cb'),
TX_FIELD('ctVersion', FIELD_TYPES.ctVersion),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('deposit', FIELD_TYPES.amount),
TX_FIELD('amount', FIELD_TYPES.amount),
TX_FIELD('gas', FIELD_TYPES.int),
TX_FIELD('gasPrice', FIELD_TYPES.int),
TX_FIELD('callData', FIELD_TYPES.binary, 'cb')
]
const CONTRACT_CALL_TX = [
...BASE_TX,
TX_FIELD('callerId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('contractId', FIELD_TYPES.id, ['ct', 'nm']),
TX_FIELD('abiVersion', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('amount', FIELD_TYPES.amount),
TX_FIELD('gas', FIELD_TYPES.int),
TX_FIELD('gasPrice', FIELD_TYPES.int),
TX_FIELD('callData', FIELD_TYPES.binary, 'cb')
]
const CONTRACT_CALL_RESULT_TX = [
...BASE_TX,
TX_FIELD('callerId', FIELD_TYPES.id, 'ak'),
TX_FIELD('callerNonce', FIELD_TYPES.int),
TX_FIELD('height', FIELD_TYPES.int),
TX_FIELD('contractId', FIELD_TYPES.id, 'ct'),
TX_FIELD('gasPrice', FIELD_TYPES.int),
TX_FIELD('gasUsed', FIELD_TYPES.int),
TX_FIELD('returnValue', FIELD_TYPES.binary, 'cb'),
TX_FIELD('returnType', FIELD_TYPES.callReturnType),
// TODO: add serialization for <log> :: [ { <address> :: id, [ <topics> :: binary() ], <data> :: binary() } ]
TX_FIELD('log', FIELD_TYPES.rawBinary)
]
const ORACLE_REGISTER_TX = [
...BASE_TX,
TX_FIELD('accountId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('queryFormat', FIELD_TYPES.string),
TX_FIELD('responseFormat', FIELD_TYPES.string),
TX_FIELD('queryFee', FIELD_TYPES.amount),
TX_FIELD('oracleTtlType', FIELD_TYPES.int),
TX_FIELD('oracleTtlValue', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('abiVersion', FIELD_TYPES.int)
]
const ORACLE_EXTEND_TX = [
...BASE_TX,
TX_FIELD('oracleId', FIELD_TYPES.id, ['ok', 'nm']),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('oracleTtlType', FIELD_TYPES.int),
TX_FIELD('oracleTtlValue', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const ORACLE_QUERY_TX = [
...BASE_TX,
TX_FIELD('senderId', FIELD_TYPES.id, 'ak'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('oracleId', FIELD_TYPES.id, ['ok', 'nm']),
TX_FIELD('query', FIELD_TYPES.string),
TX_FIELD('queryFee', FIELD_TYPES.amount),
TX_FIELD('queryTtlType', FIELD_TYPES.int),
TX_FIELD('queryTtlValue', FIELD_TYPES.int),
TX_FIELD('responseTtlType', FIELD_TYPES.int),
TX_FIELD('responseTtlValue', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const ORACLE_RESPOND_TX = [
...BASE_TX,
TX_FIELD('oracleId', FIELD_TYPES.id, 'ok'),
TX_FIELD('nonce', FIELD_TYPES.int),
TX_FIELD('queryId', FIELD_TYPES.binary, 'oq'),
TX_FIELD('response', FIELD_TYPES.string),
TX_FIELD('responseTtlType', FIELD_TYPES.int),
TX_FIELD('responseTtlValue', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int)
]
const CHANNEL_CREATE_TX = [
...BASE_TX,
TX_FIELD('initiator', FIELD_TYPES.id, 'ak'),
TX_FIELD('initiatorAmount', FIELD_TYPES.int),
TX_FIELD('responder', FIELD_TYPES.id, 'ak'),
TX_FIELD('responderAmount', FIELD_TYPES.int),
TX_FIELD('channelReserve', FIELD_TYPES.int),
TX_FIELD('lockPeriod', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('delegateIds', FIELD_TYPES.string),
TX_FIELD('stateHash', FIELD_TYPES.binary, 'st'),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_CREATE_TX_2 = [
...BASE_TX,
TX_FIELD('initiator', FIELD_TYPES.id, 'ak'),
TX_FIELD('initiatorAmount', FIELD_TYPES.int),
TX_FIELD('responder', FIELD_TYPES.id, 'ak'),
TX_FIELD('responderAmount', FIELD_TYPES.int),
TX_FIELD('channelReserve', FIELD_TYPES.int),
TX_FIELD('lockPeriod', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('initiatorDelegateIds', FIELD_TYPES.string),
TX_FIELD('responderDelegateIds', FIELD_TYPES.string),
TX_FIELD('stateHash', FIELD_TYPES.binary, 'st'),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_DEPOSIT_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('fromId', FIELD_TYPES.id, 'ak'),
TX_FIELD('amount', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('stateHash', FIELD_TYPES.binary, 'st'),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_WITHDRAW_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('toId', FIELD_TYPES.id, 'ak'),
TX_FIELD('amount', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('stateHash', FIELD_TYPES.binary, 'st'),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_CLOSE_MUTUAL_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('fromId', FIELD_TYPES.id, 'ak'),
TX_FIELD('initiatorAmountFinal', FIELD_TYPES.int),
TX_FIELD('responderAmountFinal', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_CLOSE_SOLO_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('fromId', FIELD_TYPES.id, 'ak'),
TX_FIELD('payload', FIELD_TYPES.binary, 'tx'),
TX_FIELD('poi', FIELD_TYPES.binary, 'pi'),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_SLASH_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('fromId', FIELD_TYPES.id, 'ak'),
TX_FIELD('payload', FIELD_TYPES.binary, 'tx'),
TX_FIELD('poi', FIELD_TYPES.binary, 'pi'),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_SETTLE_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('fromId', FIELD_TYPES.id, 'ak'),
TX_FIELD('initiatorAmountFinal', FIELD_TYPES.int),
TX_FIELD('responderAmountFinal', FIELD_TYPES.int),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_FORCE_PROGRESS_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('fromId', FIELD_TYPES.id, 'ak'),
TX_FIELD('payload', FIELD_TYPES.binary, 'tx'),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('update', FIELD_TYPES.binary),
TX_FIELD('stateHash', FIELD_TYPES.binary),
TX_FIELD('offChainTrees', FIELD_TYPES.stateTree),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_OFFCHAIN_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('updates', FIELD_TYPES.offChainUpdates),
TX_FIELD('stateHash', FIELD_TYPES.binary, 'st')
]
const CHANNEL_OFFCHAIN_TX_2 = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('stateHash', FIELD_TYPES.binary, 'st')
]
const CHANNEL_TX = [
...BASE_TX,
TX_FIELD('initiator', FIELD_TYPES.id, 'ak'),
TX_FIELD('responder', FIELD_TYPES.id, 'ak'),
TX_FIELD('channelAmount', FIELD_TYPES.int),
TX_FIELD('initiatorAmount', FIELD_TYPES.int),
TX_FIELD('responderAmount', FIELD_TYPES.int),
TX_FIELD('channelReserve', FIELD_TYPES.int),
TX_FIELD('delegateIds', FIELD_TYPES.ids),
TX_FIELD('stateHash', FIELD_TYPES.hex),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('soloRound', FIELD_TYPES.int),
TX_FIELD('lockPeriod', FIELD_TYPES.int),
TX_FIELD('lockedUntil', FIELD_TYPES.int)
]
const CHANNEL_TX_2 = [
...BASE_TX,
TX_FIELD('initiator', FIELD_TYPES.id, 'ak'),
TX_FIELD('responder', FIELD_TYPES.id, 'ak'),
TX_FIELD('channelAmount', FIELD_TYPES.int),
TX_FIELD('initiatorAmount', FIELD_TYPES.int),
TX_FIELD('responderAmount', FIELD_TYPES.int),
TX_FIELD('channelReserve', FIELD_TYPES.int),
TX_FIELD('delegateIds', FIELD_TYPES.ids),
TX_FIELD('stateHash', FIELD_TYPES.hex),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('soloRound', FIELD_TYPES.int),
TX_FIELD('lockPeriod', FIELD_TYPES.int),
TX_FIELD('lockedUntil', FIELD_TYPES.int),
TX_FIELD('initiatorAuth', FIELD_TYPES.binary, 'cb'),
TX_FIELD('responderAuth', FIELD_TYPES.binary, 'cb')
]
const CHANNEL_TX_3 = [
...BASE_TX,
TX_FIELD('initiator', FIELD_TYPES.id, 'ak'),
TX_FIELD('responder', FIELD_TYPES.id, 'ak'),
TX_FIELD('channelAmount', FIELD_TYPES.int),
TX_FIELD('initiatorAmount', FIELD_TYPES.int),
TX_FIELD('responderAmount', FIELD_TYPES.int),
TX_FIELD('channelReserve', FIELD_TYPES.int),
TX_FIELD('initiatorDelegateIds', FIELD_TYPES.ids),
TX_FIELD('responderDelegateIds', FIELD_TYPES.ids),
TX_FIELD('stateHash', FIELD_TYPES.hex),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('soloRound', FIELD_TYPES.int),
TX_FIELD('lockPeriod', FIELD_TYPES.int),
TX_FIELD('lockedUntil', FIELD_TYPES.int),
TX_FIELD('initiatorAuth', FIELD_TYPES.binary, 'cb'),
TX_FIELD('responderAuth', FIELD_TYPES.binary, 'cb')
]
const CHANNEL_SNAPSHOT_SOLO_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('fromId', FIELD_TYPES.id, 'ak'),
TX_FIELD('payload', FIELD_TYPES.binary, 'tx'),
TX_FIELD('ttl', FIELD_TYPES.int),
TX_FIELD('fee', FIELD_TYPES.int),
TX_FIELD('nonce', FIELD_TYPES.int)
]
const CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX = [
...BASE_TX,
TX_FIELD('owner', FIELD_TYPES.id, 'ak'),
TX_FIELD('ctVersion', FIELD_TYPES.int),
TX_FIELD('code', FIELD_TYPES.binary, 'cb'),
TX_FIELD('deposit', FIELD_TYPES.int),
TX_FIELD('callData', FIELD_TYPES.binary, 'cb')
]
const CHANNEL_OFFCHAIN_CALL_CONTRACT_TX = [
...BASE_TX,
TX_FIELD('caller', FIELD_TYPES.id, 'ak'),
TX_FIELD('contract', FIELD_TYPES.id, 'ct'),
TX_FIELD('abiVersion', FIELD_TYPES.int),
TX_FIELD('amount', FIELD_TYPES.int),
TX_FIELD('callData', FIELD_TYPES.binary, 'cb'),
TX_FIELD('callStack', FIELD_TYPES.callStack),
TX_FIELD('gasPrice', FIELD_TYPES.int),
TX_FIELD('gasLimit', FIELD_TYPES.int)
]
const CHANNEL_RECONNECT_TX = [
...BASE_TX,
TX_FIELD('channelId', FIELD_TYPES.id, 'ch'),
TX_FIELD('round', FIELD_TYPES.int),
TX_FIELD('role', FIELD_TYPES.string),
TX_FIELD('pubkey', FIELD_TYPES.id, 'ak')
]
const CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX = [
...BASE_TX,
TX_FIELD('from', FIELD_TYPES.id, 'ak'),
TX_FIELD('to', FIELD_TYPES.id, 'ak'),
TX_FIELD('amount', FIELD_TYPES.int)
]
const CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX = [
...BASE_TX,
TX_FIELD('from', FIELD_TYPES.id, 'ak'),
TX_FIELD('amount', FIELD_TYPES.int)
]
const CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX = [
...BASE_TX,
TX_FIELD('from', FIELD_TYPES.id, 'ak'),
TX_FIELD('amount', FIELD_TYPES.int)
]
const PROOF_OF_INCLUSION_TX = [
...BASE_TX,
TX_FIELD('accounts', FIELD_TYPES.mptrees),
TX_FIELD('calls', FIELD_TYPES.mptrees),
TX_FIELD('channels', FIELD_TYPES.mptrees),
TX_FIELD('contracts', FIELD_TYPES.mptrees),
TX_FIELD('ns', FIELD_TYPES.mptrees),
TX_FIELD('oracles', FIELD_TYPES.mptrees)
]
const STATE_TREES_TX = [
...BASE_TX,
TX_FIELD('contracts', FIELD_TYPES.rlpBinary),
TX_FIELD('calls', FIELD_TYPES.rlpBinary),
TX_FIELD('channels', FIELD_TYPES.rlpBinary),
TX_FIELD('ns', FIELD_TYPES.rlpBinary),
TX_FIELD('oracles', FIELD_TYPES.rlpBinary),
TX_FIELD('accounts', FIELD_TYPES.rlpBinary)
]
const MERKLE_PATRICIA_TREE_TX = [
...BASE_TX,
TX_FIELD('values', FIELD_TYPES.rlpBinaries)
]
const MERKLE_PATRICIA_TREE_VALUE_TX = [
...BASE_TX,
TX_FIELD('key', FIELD_TYPES.hex),
TX_FIELD('value', FIELD_TYPES.rawBinary)
]
const CONTRACTS_TREE_TX = [
...BASE_TX,
TX_FIELD('contracts', FIELD_TYPES.rlpBinary)
]
const CONTRACT_CALLS_TREE_TX = [
...BASE_TX,
TX_FIELD('calls', FIELD_TYPES.rlpBinary)
]
const CHANNELS_TREE_TX = [
...BASE_TX,
TX_FIELD('channels', FIELD_TYPES.rlpBinary)
]
const NAMESERVICE_TREE_TX = [
...BASE_TX,
TX_FIELD('mtree', FIELD_TYPES.rlpBinary)
]
const ORACLES_TREE_TX = [
...BASE_TX,
TX_FIELD('otree', FIELD_TYPES.rlpBinary)
]
const ACCOUNTS_TREE_TX = [
...BASE_TX,
TX_FIELD('accounts', FIELD_TYPES.rlpBinary)
]
export const TX_SERIALIZATION_SCHEMA = {
[TX_TYPE.account]: {
1: TX_SCHEMA_FIELD(ACCOUNT_TX, OBJECT_TAG_ACCOUNT),
2: TX_SCHEMA_FIELD(ACCOUNT_TX_2, OBJECT_TAG_ACCOUNT)
},
[TX_TYPE.signed]: {
1: TX_SCHEMA_FIELD(SIGNED_TX, OBJECT_TAG_SIGNED_TRANSACTION)
},
[TX_TYPE.spend]: {
1: TX_SCHEMA_FIELD(SPEND_TX, OBJECT_TAG_SPEND_TRANSACTION)
},
[TX_TYPE.namePreClaim]: {
1: TX_SCHEMA_FIELD(NAME_PRE_CLAIM_TX, OBJECT_TAG_NAME_SERVICE_PRECLAIM_TRANSACTION)
},
[TX_TYPE.nameClaim]: {
1: TX_SCHEMA_FIELD(NAME_CLAIM_TX, OBJECT_TAG_NAME_SERVICE_CLAIM_TRANSACTION),
2: TX_SCHEMA_FIELD(NAME_CLAIM_TX_2, OBJECT_TAG_NAME_SERVICE_CLAIM_TRANSACTION)
},
[TX_TYPE.nameUpdate]: {
1: TX_SCHEMA_FIELD(NAME_UPDATE_TX, OBJECT_TAG_NAME_SERVICE_UPDATE_TRANSACTION)
},
[TX_TYPE.nameTransfer]: {
1: TX_SCHEMA_FIELD(NAME_TRANSFER_TX, OBJECT_TAG_NAME_SERVICE_TRANSFER_TRANSACTION)
},
[TX_TYPE.nameRevoke]: {
1: TX_SCHEMA_FIELD(NAME_REVOKE_TX, OBJECT_TAG_NAME_SERVICE_REVOKE_TRANSACTION)
},
[TX_TYPE.contract]: {
1: TX_SCHEMA_FIELD(CONTRACT_TX, OBJECT_TAG_CONTRACT)
},
[TX_TYPE.contractCreate]: {
1: TX_SCHEMA_FIELD(CONTRACT_CREATE_TX, OBJECT_TAG_CONTRACT_CREATE_TRANSACTION)
},
[TX_TYPE.contractCall]: {
1: TX_SCHEMA_FIELD(CONTRACT_CALL_TX, OBJECT_TAG_CONTRACT_CALL_TRANSACTION)
},
[TX_TYPE.contractCallResult]: {
1: TX_SCHEMA_FIELD(CONTRACT_CALL_RESULT_TX, OBJECT_TAG_CONTRACT_CALL)
},
[TX_TYPE.oracleRegister]: {
1: TX_SCHEMA_FIELD(ORACLE_REGISTER_TX, OBJECT_TAG_ORACLE_REGISTER_TRANSACTION)
},
[TX_TYPE.oracleExtend]: {
1: TX_SCHEMA_FIELD(ORACLE_EXTEND_TX, OBJECT_TAG_ORACLE_EXTEND_TRANSACTION)
},
[TX_TYPE.oracleQuery]: {
1: TX_SCHEMA_FIELD(ORACLE_QUERY_TX, OBJECT_TAG_ORACLE_QUERY_TRANSACTION)
},
[TX_TYPE.oracleResponse]: {
1: TX_SCHEMA_FIELD(ORACLE_RESPOND_TX, OBJECT_TAG_ORACLE_RESPONSE_TRANSACTION)
},
[TX_TYPE.channelCreate]: {
1: TX_SCHEMA_FIELD(CHANNEL_CREATE_TX, OBJECT_TAG_CHANNEL_CREATE_TX),
2: TX_SCHEMA_FIELD(CHANNEL_CREATE_TX_2, OBJECT_TAG_CHANNEL_CREATE_TX)
},
[TX_TYPE.channelCloseMutual]: {
1: TX_SCHEMA_FIELD(CHANNEL_CLOSE_MUTUAL_TX, OBJECT_TAG_CHANNEL_CLOSE_MUTUAL_TX)
},
[TX_TYPE.channelCloseSolo]: {
1: TX_SCHEMA_FIELD(CHANNEL_CLOSE_SOLO_TX, OBJECT_TAG_CHANNEL_CLOSE_SOLO_TX)
},
[TX_TYPE.channelSlash]: {
1: TX_SCHEMA_FIELD(CHANNEL_SLASH_TX, OBJECT_TAG_CHANNEL_SLASH_TX)
},
[TX_TYPE.channelDeposit]: {
1: TX_SCHEMA_FIELD(CHANNEL_DEPOSIT_TX, OBJECT_TAG_CHANNEL_DEPOSIT_TX)
},
[TX_TYPE.channelWithdraw]: {
1: TX_SCHEMA_FIELD(CHANNEL_WITHDRAW_TX, OBJECT_TAG_CHANNEL_WITHRAW_TX)
},
[TX_TYPE.channelSettle]: {
1: TX_SCHEMA_FIELD(CHANNEL_SETTLE_TX, OBJECT_TAG_CHANNEL_SETTLE_TX)
},
[TX_TYPE.channelForceProgress]: {
1: TX_SCHEMA_FIELD(CHANNEL_FORCE_PROGRESS_TX, OBJECT_TAG_CHANNEL_FORCE_PROGRESS_TX)
},
[TX_TYPE.channelOffChain]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_TX),
2: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_TX_2, OBJECT_TAG_CHANNEL_OFFCHAIN_TX)
},
[TX_TYPE.channel]: {
1: TX_SCHEMA_FIELD(CHANNEL_TX, OBJECT_TAG_CHANNEL),
2: TX_SCHEMA_FIELD(CHANNEL_TX_2, OBJECT_TAG_CHANNEL),
3: TX_SCHEMA_FIELD(CHANNEL_TX_3, OBJECT_TAG_CHANNEL)
},
[TX_TYPE.channelSnapshotSolo]: {
1: TX_SCHEMA_FIELD(CHANNEL_SNAPSHOT_SOLO_TX, OBJECT_TAG_CHANNEL_SNAPSHOT_SOLO_TX)
},
[TX_TYPE.channelOffChainUpdateTransfer]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX)
},
[TX_TYPE.channelOffChainUpdateDeposit]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX)
},
[TX_TYPE.channelOffChainUpdateWithdrawal]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX)
},
[TX_TYPE.channelOffChainCreateContract]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX)
},
[TX_TYPE.channelOffChainCallContract]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_CALL_CONTRACT_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_CALL_CONTRACT_TX)
},
[TX_TYPE.channelReconnect]: {
1: TX_SCHEMA_FIELD(CHANNEL_RECONNECT_TX, OBJECT_TAG_CHANNEL_RECONNECT_TX)
},
[TX_TYPE.proofOfInclusion]: {
1: TX_SCHEMA_FIELD(PROOF_OF_INCLUSION_TX, OBJECT_TAG_PROOF_OF_INCLUSION)
},
[TX_TYPE.stateTrees]: {
1: TX_SCHEMA_FIELD(STATE_TREES_TX, OBJECT_TAG_STATE_TREES)
},
[TX_TYPE.merklePatriciaTree]: {
1: TX_SCHEMA_FIELD(MERKLE_PATRICIA_TREE_TX, OBJECT_TAG_MERKLE_PATRICIA_TREE)
},
[TX_TYPE.merklePatriciaTreeValue]: {
1: TX_SCHEMA_FIELD(MERKLE_PATRICIA_TREE_VALUE_TX, OBJECT_TAG_MERKLE_PATRICIA_TREE_VALUE)
},
[TX_TYPE.contractsTree]: {
1: TX_SCHEMA_FIELD(CONTRACTS_TREE_TX, OBJECT_TAG_CONTRACTS_TREE)
},
[TX_TYPE.contractCallsTree]: {
1: TX_SCHEMA_FIELD(CONTRACT_CALLS_TREE_TX, OBJECT_TAG_CONTRACT_CALLS_TREE)
},
[TX_TYPE.channelsTree]: {
1: TX_SCHEMA_FIELD(CHANNELS_TREE_TX, OBJECT_TAG_CHANNELS_TREE)
},
[TX_TYPE.nameserviceTree]: {
1: TX_SCHEMA_FIELD(NAMESERVICE_TREE_TX, OBJECT_TAG_NAMESERVICE_TREE)
},
[TX_TYPE.oraclesTree]: {
1: TX_SCHEMA_FIELD(ORACLES_TREE_TX, OBJECT_TAG_ORACLES_TREE)
},
[TX_TYPE.accountsTree]: {
1: TX_SCHEMA_FIELD(ACCOUNTS_TREE_TX, OBJECT_TAG_ACCOUNTS_TREE)
},
[TX_TYPE.gaAttach]: {
1: TX_SCHEMA_FIELD(GA_ATTACH_TX, OBJECT_TAG_GA_ATTACH)
},
[TX_TYPE.gaMeta]: {
1: TX_SCHEMA_FIELD(GA_META_TX, OBJECT_TAG_GA_META),
2: TX_SCHEMA_FIELD(GA_META_TX_2, OBJECT_TAG_GA_META)
}
}
export const TX_DESERIALIZATION_SCHEMA = {
[OBJECT_TAG_ACCOUNT]: {
1: TX_SCHEMA_FIELD(ACCOUNT_TX, OBJECT_TAG_ACCOUNT),
2: TX_SCHEMA_FIELD(ACCOUNT_TX_2, OBJECT_TAG_ACCOUNT)
},
[OBJECT_TAG_SIGNED_TRANSACTION]: {
1: TX_SCHEMA_FIELD(SIGNED_TX, OBJECT_TAG_SIGNED_TRANSACTION)
},
[OBJECT_TAG_SPEND_TRANSACTION]: {
1: TX_SCHEMA_FIELD(SPEND_TX, OBJECT_TAG_SPEND_TRANSACTION)
},
[OBJECT_TAG_NAME_SERVICE_PRECLAIM_TRANSACTION]: {
1: TX_SCHEMA_FIELD(NAME_PRE_CLAIM_TX, OBJECT_TAG_NAME_SERVICE_PRECLAIM_TRANSACTION)
},
[OBJECT_TAG_NAME_SERVICE_CLAIM_TRANSACTION]: {
1: TX_SCHEMA_FIELD(NAME_CLAIM_TX, OBJECT_TAG_NAME_SERVICE_CLAIM_TRANSACTION),
2: TX_SCHEMA_FIELD(NAME_CLAIM_TX_2, OBJECT_TAG_NAME_SERVICE_CLAIM_TRANSACTION)
},
[OBJECT_TAG_NAME_SERVICE_UPDATE_TRANSACTION]: {
1: TX_SCHEMA_FIELD(NAME_UPDATE_TX, OBJECT_TAG_NAME_SERVICE_UPDATE_TRANSACTION)
},
[OBJECT_TAG_NAME_SERVICE_TRANSFER_TRANSACTION]: {
1: TX_SCHEMA_FIELD(NAME_TRANSFER_TX, OBJECT_TAG_NAME_SERVICE_TRANSFER_TRANSACTION)
},
[OBJECT_TAG_NAME_SERVICE_REVOKE_TRANSACTION]: {
1: TX_SCHEMA_FIELD(NAME_REVOKE_TX, OBJECT_TAG_NAME_SERVICE_REVOKE_TRANSACTION)
},
[OBJECT_TAG_CONTRACT]: {
1: TX_SCHEMA_FIELD(CONTRACT_TX, OBJECT_TAG_CONTRACT)
},
[OBJECT_TAG_CONTRACT_CREATE_TRANSACTION]: {
1: TX_SCHEMA_FIELD(CONTRACT_CREATE_TX, OBJECT_TAG_CONTRACT_CREATE_TRANSACTION)
},
[OBJECT_TAG_CONTRACT_CALL_TRANSACTION]: {
1: TX_SCHEMA_FIELD(CONTRACT_CALL_TX, OBJECT_TAG_CONTRACT_CALL_TRANSACTION)
},
[OBJECT_TAG_CONTRACT_CALL]: {
1: TX_SCHEMA_FIELD(CONTRACT_CALL_RESULT_TX, OBJECT_TAG_CONTRACT_CALL)
},
[OBJECT_TAG_ORACLE_REGISTER_TRANSACTION]: {
1: TX_SCHEMA_FIELD(ORACLE_REGISTER_TX, OBJECT_TAG_ORACLE_REGISTER_TRANSACTION)
},
[OBJECT_TAG_ORACLE_EXTEND_TRANSACTION]: {
1: TX_SCHEMA_FIELD(ORACLE_EXTEND_TX, OBJECT_TAG_ORACLE_EXTEND_TRANSACTION)
},
[OBJECT_TAG_ORACLE_QUERY_TRANSACTION]: {
1: TX_SCHEMA_FIELD(ORACLE_QUERY_TX, OBJECT_TAG_ORACLE_QUERY_TRANSACTION)
},
[OBJECT_TAG_ORACLE_RESPONSE_TRANSACTION]: {
1: TX_SCHEMA_FIELD(ORACLE_RESPOND_TX, OBJECT_TAG_ORACLE_RESPONSE_TRANSACTION)
},
[OBJECT_TAG_CHANNEL_CREATE_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_CREATE_TX, OBJECT_TAG_CHANNEL_CREATE_TX),
2: TX_SCHEMA_FIELD(CHANNEL_CREATE_TX_2, OBJECT_TAG_CHANNEL_CREATE_TX)
},
[OBJECT_TAG_CHANNEL_CLOSE_MUTUAL_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_CLOSE_MUTUAL_TX, OBJECT_TAG_CHANNEL_CLOSE_MUTUAL_TX)
},
[OBJECT_TAG_CHANNEL_CLOSE_SOLO_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_CLOSE_SOLO_TX, OBJECT_TAG_CHANNEL_CLOSE_SOLO_TX)
},
[OBJECT_TAG_CHANNEL_SLASH_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_SLASH_TX, OBJECT_TAG_CHANNEL_SLASH_TX)
},
[OBJECT_TAG_CHANNEL_DEPOSIT_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_DEPOSIT_TX, OBJECT_TAG_CHANNEL_DEPOSIT_TX)
},
[OBJECT_TAG_CHANNEL_WITHRAW_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_WITHDRAW_TX, OBJECT_TAG_CHANNEL_WITHRAW_TX)
},
[OBJECT_TAG_CHANNEL_SETTLE_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_SETTLE_TX, OBJECT_TAG_CHANNEL_SETTLE_TX)
},
[OBJECT_TAG_CHANNEL_OFFCHAIN_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_TX),
2: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_TX_2, OBJECT_TAG_CHANNEL_OFFCHAIN_TX)
},
[OBJECT_TAG_CHANNEL]: {
1: TX_SCHEMA_FIELD(CHANNEL_TX, OBJECT_TAG_CHANNEL),
2: TX_SCHEMA_FIELD(CHANNEL_TX_2, OBJECT_TAG_CHANNEL),
3: TX_SCHEMA_FIELD(CHANNEL_TX_3, OBJECT_TAG_CHANNEL)
},
[OBJECT_TAG_CHANNEL_SNAPSHOT_SOLO_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_SNAPSHOT_SOLO_TX, OBJECT_TAG_CHANNEL_SNAPSHOT_SOLO_TX)
},
[OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_TRANSFER_TX)
},
[OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_DEPOSIT_TX)
},
[OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_UPDATE_WITHDRAWAL_TX)
},
[OBJECT_TAG_CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_CREATE_CONTRACT_TX)
},
[OBJECT_TAG_CHANNEL_OFFCHAIN_CALL_CONTRACT_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_OFFCHAIN_CALL_CONTRACT_TX, OBJECT_TAG_CHANNEL_OFFCHAIN_CALL_CONTRACT_TX)
},
[OBJECT_TAG_CHANNEL_RECONNECT_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_RECONNECT_TX, OBJECT_TAG_CHANNEL_RECONNECT_TX)
},
[OBJECT_TAG_PROOF_OF_INCLUSION]: {
1: TX_SCHEMA_FIELD(PROOF_OF_INCLUSION_TX, OBJECT_TAG_PROOF_OF_INCLUSION)
},
[OBJECT_TAG_STATE_TREES]: {
1: TX_SCHEMA_FIELD(STATE_TREES_TX, OBJECT_TAG_STATE_TREES)
},
[OBJECT_TAG_MERKLE_PATRICIA_TREE]: {
1: TX_SCHEMA_FIELD(MERKLE_PATRICIA_TREE_TX, OBJECT_TAG_MERKLE_PATRICIA_TREE)
},
[OBJECT_TAG_MERKLE_PATRICIA_TREE_VALUE]: {
1: TX_SCHEMA_FIELD(MERKLE_PATRICIA_TREE_VALUE_TX, OBJECT_TAG_MERKLE_PATRICIA_TREE_VALUE)
},
[OBJECT_TAG_CONTRACTS_TREE]: {
1: TX_SCHEMA_FIELD(CONTRACTS_TREE_TX, OBJECT_TAG_CONTRACTS_TREE)
},
[OBJECT_TAG_CONTRACT_CALLS_TREE]: {
1: TX_SCHEMA_FIELD(CONTRACT_CALLS_TREE_TX, OBJECT_TAG_CONTRACT_CALLS_TREE)
},
[OBJECT_TAG_CHANNELS_TREE]: {
1: TX_SCHEMA_FIELD(CHANNELS_TREE_TX, OBJECT_TAG_CHANNELS_TREE)
},
[OBJECT_TAG_NAMESERVICE_TREE]: {
1: TX_SCHEMA_FIELD(NAMESERVICE_TREE_TX, OBJECT_TAG_NAMESERVICE_TREE)
},
[OBJECT_TAG_ORACLES_TREE]: {
1: TX_SCHEMA_FIELD(ORACLES_TREE_TX, OBJECT_TAG_ORACLES_TREE)
},
[OBJECT_TAG_ACCOUNTS_TREE]: {
1: TX_SCHEMA_FIELD(ACCOUNTS_TREE_TX, OBJECT_TAG_ACCOUNTS_TREE)
},
[OBJECT_TAG_GA_ATTACH]: {
1: TX_SCHEMA_FIELD(GA_ATTACH_TX, OBJECT_TAG_GA_ATTACH)
},
[OBJECT_TAG_GA_META]: {
1: TX_SCHEMA_FIELD(GA_META_TX, OBJECT_TAG_GA_META),
2: TX_SCHEMA_FIELD(GA_META_TX_2, OBJECT_TAG_GA_META)
},
[OBJECT_TAG_CHANNEL_FORCE_PROGRESS_TX]: {
1: TX_SCHEMA_FIELD(CHANNEL_FORCE_PROGRESS_TX, OBJECT_TAG_CHANNEL_FORCE_PROGRESS_TX)
},
[OBJECT_TAG_SOPHIA_BYTE_CODE]: {
1: TX_SCHEMA_FIELD(CONTRACT_BYTE_CODE_ROMA, OBJECT_TAG_SOPHIA_BYTE_CODE),
2: TX_SCHEMA_FIELD(CONTRACT_BYTE_CODE_MINERVA, OBJECT_TAG_SOPHIA_BYTE_CODE),
3: TX_SCHEMA_FIELD(CONTRACT_BYTE_CODE_LIMA, OBJECT_TAG_SOPHIA_BYTE_CODE)
}
}
// VERIFICATION SCHEMA
const ERROR_TYPE = { ERROR: 'error', WARNING: 'warning' }
const VERIFICATION_FIELD = (msg, verificationFn, error) => [msg, verificationFn, error]
const VALIDATORS = {
signature: 'signature',
insufficientFee: 'insufficientFee',
expiredTTL: 'expiredTTL',
insufficientBalanceForAmountFee: 'insufficientBalanceForAmountFee',
insufficientBalanceForAmount: 'insufficientBalanceForAmount',
nonceUsed: 'nonceUsed',
nonceHigh: 'nonceHigh',
minGasPrice: 'minGasPrice',
vmAndAbiVersion: 'vmAndAbiVersion',
insufficientBalanceForFeeNameFee: 'insufficientBalanceForFeeNameFee'
}
const ERRORS = {
invalidSignature: { key: 'InvalidSignature', type: ERROR_TYPE.ERROR, txKey: 'signature' },
insufficientFee: { key: 'InsufficientFee', type: ERROR_TYPE.ERROR, txKey: 'fee' },
expiredTTL: { key: 'ExpiredTTL', type: ERROR_TYPE.ERROR, txKey: 'ttl' },
insufficientBalanceForAmountFee: { key: 'InsufficientBalanceForAmountFee', type: ERROR_TYPE.WARNING, txKey: 'fee' },
insufficientBalanceForAmount: { key: 'InsufficientBalanceForAmount', type: ERROR_TYPE.WARNING, txKey: 'amount' },
nonceUsed: { key: 'NonceUsed', type: ERROR_TYPE.ERROR, txKey: 'nonce' },
nonceHigh: { key: 'NonceHigh', type: ERROR_TYPE.WARNING, txKey: 'nonce' },
minGasPrice: { key: 'minGasPrice', type: ERROR_TYPE.ERROR, txKey: 'gasPrice' },
vmAndAbiVersion: { key: 'vmAndAbiVersion', type: ERROR_TYPE.ERROR, txKey: 'ctVersion' },
insufficientBalanceForFeeNameFee: { key: 'insufficientBalanceForFeeNameFee', type: ERROR_TYPE.ERROR, txKey: 'nameFee' }
}
export const SIGNAT