packages/oo7-substrate/src/types.js
- const { toLE } = require('./utils')
-
- class VecU8 extends Uint8Array {
- toJSON() {
- return { _type: 'VecU8', data: Array.from(this) }
- }
- }
-
- class AccountId extends Uint8Array {
- toJSON() {
- return { _type: 'AccountId', data: Array.from(this) }
- }
- }
-
- class Hash extends Uint8Array {
- toJSON() {
- return { _type: 'Hash', data: Array.from(this) }
- }
- }
-
- class Signature extends Uint8Array {
- toJSON() {
- return { _type: "Signature", data: Array.from(this) }
- }
- }
-
- class VoteThreshold extends String {
- toJSON() {
- return { _type: 'VoteThreshold', data: this + ''}
- }
- }
-
- class BlockNumber extends Number {
- toJSON() {
- return { _type: 'BlockNumber', data: this+0 }
- }
- }
-
- class AccountIndex extends Number {
- toJSON() {
- return { _type: 'AccountIndex', data: this+0 }
- }
- }
-
- class Tuple extends Array {
- toJSON() {
- return { _type: 'Tuple', data: Array.from(this) }
- }
- }
-
- class SlashPreference extends Number {
- toJSON() { return { _type: 'SlashPreference', data: this+0 } }
- }
-
- class Perbill extends Number {
- toJSON() { return { _type: 'Perbill', data: this+0 } }
- }
-
- class Permill extends Number {
- toJSON() { return { _type: 'Permill', data: this+0 } }
- }
-
- class Moment extends Date {
- constructor(seconds) {
- super(seconds * 1000)
- this.number = seconds
- }
- toJSON() {
- return { _type: 'Moment', data: this.number }
- }
- }
-
- class Balance extends Number {
- toJSON() { return { _type: 'Balance', data: this+0 } }
- add(b) { return new Balance(this + b) }
- sub(b) { return new Balance(this - b) }
- }
-
- class TransactionEra {
- constructor (period, phase) {
- if (typeof period === 'number' && typeof phase === 'number') {
- this.period = 2 << Math.min(15, Math.max(1, Math.ceil(Math.log2(period)) - 1))
- this.phase = phase % this.period
- }
- }
-
- encode() {
- if (typeof this.period === 'number' && typeof this.phase === 'number') {
- let l = Math.min(15, Math.max(1, Math.ceil(Math.log2(this.period)) - 1))
- let factor = Math.max(1, this.period >> 12)
- let res = toLE((Math.floor(this.phase / factor) << 4) + l, 2)
- return res
- } else {
- return new Uint8Array([0])
- }
- }
- }
-
- function reviver(key, bland) {
- if (typeof bland == 'object' && bland) {
- switch (bland._type) {
- case 'VecU8': return new VecU8(bland.data);
- case 'AccountId': return new AccountId(bland.data);
- case 'Hash': return new Hash(bland.data);
- case 'Signature': return new Signature(bland.data);
- case 'VoteThreshold': return new VoteThreshold(bland.data);
- case 'SlashPreference': return new SlashPreference(bland.data);
- case 'Perbill': return new Perbill(bland.data);
- case 'Permill': return new Permill(bland.data);
- case 'Moment': return new Moment(bland.data);
- case 'Tuple': return new Tuple(bland.data);
- case 'Balance': return new Balance(bland.data);
- case 'BlockNumber': return new BlockNumber(bland.data);
- case 'AccountIndex': return new AccountIndex(bland.data);
- }
- }
- return bland;
- }
-
- module.exports = { VecU8, AccountId, Hash, Signature, VoteThreshold, SlashPreference, Moment, Balance,
- BlockNumber, AccountIndex, Tuple, TransactionEra, Perbill, Permill, reviver }