UNPKG

@btc-vision/transaction

Version:

OPNet transaction library allows you to create and sign transactions for the OPNet network.

129 lines (128 loc) 5.31 kB
import shajs from 'sha.js'; import { BinaryReader } from '../buffer/BinaryReader.js'; import { BufferHelper } from '../utils/BufferHelper.js'; export var ABIDataTypes; (function (ABIDataTypes) { ABIDataTypes["UINT8"] = "UINT8"; ABIDataTypes["UINT16"] = "UINT16"; ABIDataTypes["UINT32"] = "UINT32"; ABIDataTypes["UINT64"] = "UINT64"; ABIDataTypes["UINT128"] = "UINT128"; ABIDataTypes["UINT256"] = "UINT256"; ABIDataTypes["INT128"] = "INT128"; ABIDataTypes["BOOL"] = "BOOL"; ABIDataTypes["ADDRESS"] = "ADDRESS"; ABIDataTypes["STRING"] = "STRING"; ABIDataTypes["BYTES4"] = "BYTES4"; ABIDataTypes["BYTES32"] = "BYTES32"; ABIDataTypes["BYTES"] = "BYTES"; ABIDataTypes["ADDRESS_UINT256_TUPLE"] = "ADDRESS_UINT256_TUPLE"; ABIDataTypes["ARRAY_OF_ADDRESSES"] = "ARRAY_OF_ADDRESSES"; ABIDataTypes["ARRAY_OF_UINT256"] = "ARRAY_OF_UINT256"; ABIDataTypes["ARRAY_OF_UINT128"] = "ARRAY_OF_UINT128"; ABIDataTypes["ARRAY_OF_UINT64"] = "ARRAY_OF_UINT64"; ABIDataTypes["ARRAY_OF_UINT32"] = "ARRAY_OF_UINT32"; ABIDataTypes["ARRAY_OF_UINT16"] = "ARRAY_OF_UINT16"; ABIDataTypes["ARRAY_OF_UINT8"] = "ARRAY_OF_UINT8"; ABIDataTypes["ARRAY_OF_STRING"] = "ARRAY_OF_STRING"; ABIDataTypes["ARRAY_OF_BYTES"] = "ARRAY_OF_BYTES"; })(ABIDataTypes || (ABIDataTypes = {})); export class ABICoder { decodeData(data, types) { const byteReader = new BinaryReader(data); const result = []; for (let i = 0; i < types.length; i++) { const type = types[i]; switch (type) { case ABIDataTypes.UINT8: result.push(byteReader.readU8()); break; case ABIDataTypes.UINT16: result.push(byteReader.readU16()); break; case ABIDataTypes.UINT32: result.push(byteReader.readU32()); break; case ABIDataTypes.BYTES4: result.push(byteReader.readBytes(4)); break; case ABIDataTypes.BYTES32: result.push(byteReader.readBytes(32)); break; case ABIDataTypes.BOOL: result.push(byteReader.readBoolean()); break; case ABIDataTypes.ADDRESS: result.push(byteReader.readAddress()); break; case ABIDataTypes.STRING: result.push(byteReader.readStringWithLength()); break; case ABIDataTypes.UINT128: result.push(byteReader.readU128()); break; case ABIDataTypes.UINT256: result.push(byteReader.readU256()); break; case ABIDataTypes.INT128: result.push(byteReader.readI128()); break; case ABIDataTypes.ADDRESS_UINT256_TUPLE: result.push(byteReader.readAddressValueTuple()); break; case ABIDataTypes.BYTES: result.push(byteReader.readBytesWithLength()); break; case ABIDataTypes.UINT64: result.push(byteReader.readU64()); break; case ABIDataTypes.ARRAY_OF_ADDRESSES: result.push(byteReader.readAddressArray()); break; case ABIDataTypes.ARRAY_OF_UINT256: result.push(byteReader.readU256Array()); break; case ABIDataTypes.ARRAY_OF_UINT128: result.push(byteReader.readU128Array()); break; case ABIDataTypes.ARRAY_OF_UINT64: result.push(byteReader.readU64Array()); break; case ABIDataTypes.ARRAY_OF_UINT32: result.push(byteReader.readU32Array()); break; case ABIDataTypes.ARRAY_OF_UINT16: result.push(byteReader.readU16Array()); break; case ABIDataTypes.ARRAY_OF_UINT8: result.push(byteReader.readU8Array()); break; case ABIDataTypes.ARRAY_OF_STRING: result.push(byteReader.readStringArray()); break; case ABIDataTypes.ARRAY_OF_BYTES: result.push(byteReader.readBytesArray()); } } return result; } encodeSelector(selectorIdentifier) { const hash = this.sha256(selectorIdentifier); const selector = hash.subarray(0, 4); return selector.toString('hex'); } numericSelectorToHex(selector) { return selector.toString(16); } bigIntToUint8Array(bigIntValue, length) { const byteArray = new Uint8Array(length); const buf = BufferHelper.valueToUint8Array(bigIntValue); for (let i = 0; i < length; i++) { byteArray[i] = buf[i] || 0; } return byteArray; } sha256(buffer) { return new shajs.sha256().update(buffer).digest(); } }