diff --git a/packages/web3/src/codec/array-codec.ts b/packages/web3/src/codec/array-codec.ts index 07ae7b889..50579a584 100644 --- a/packages/web3/src/codec/array-codec.ts +++ b/packages/web3/src/codec/array-codec.ts @@ -56,7 +56,7 @@ export class ArrayCodec implements Codec { fromArray(inputs: T[]): DecodedArray { return { - length: compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU32(inputs.length)), + length: compactUnsignedIntCodec.fromU32(inputs.length), value: inputs } } diff --git a/packages/web3/src/codec/asset-output-codec.ts b/packages/web3/src/codec/asset-output-codec.ts index ffef84228..0d58c9153 100644 --- a/packages/web3/src/codec/asset-output-codec.ts +++ b/packages/web3/src/codec/asset-output-codec.ts @@ -115,24 +115,23 @@ export class AssetOutputCodec implements Codec { } static fromFixedAssetOutput(fixedOutput: FixedAssetOutput): AssetOutput { - const amount: DecodedCompactInt = compactUnsignedIntCodec.decode( - compactUnsignedIntCodec.encodeU256(BigInt(fixedOutput.attoAlphAmount)) - ) + const amount: DecodedCompactInt = compactUnsignedIntCodec.fromU256(BigInt(fixedOutput.attoAlphAmount)) + const lockTime: Buffer = longCodec.encode(BigInt(fixedOutput.lockTime)) const lockupScript: LockupScript = lockupScriptCodec.decode(Buffer.from(bs58.decode(fixedOutput.address))) const tokensValue = fixedOutput.tokens.map((token) => { return { tokenId: Buffer.from(token.id, 'hex'), - amount: compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU256(BigInt(token.amount))) + amount: compactUnsignedIntCodec.fromU256(BigInt(token.amount)) } }) const tokens: DecodedArray = { - length: compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU32(tokensValue.length)), + length: compactUnsignedIntCodec.fromU32(tokensValue.length), value: tokensValue } const additionalDataValue = Buffer.from(fixedOutput.message, 'hex') const additionalData: ByteString = { - length: compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU32(additionalDataValue.length)), + length: compactUnsignedIntCodec.fromU32(additionalDataValue.length), value: additionalDataValue } diff --git a/packages/web3/src/codec/compact-int-codec.ts b/packages/web3/src/codec/compact-int-codec.ts index f51c6b8cb..9ce6e99c5 100644 --- a/packages/web3/src/codec/compact-int-codec.ts +++ b/packages/web3/src/codec/compact-int-codec.ts @@ -130,6 +130,10 @@ export class CompactUnsignedIntCodec implements Codec { return decodePositiveInt(value.mode, body) } + fromU32(value: number): DecodedCompactInt { + return this.decode(this.encodeU32(value)) + } + toU256(value: DecodedCompactInt): bigint { const mode = value.mode & maskRest if (fixedSize(mode)) { @@ -139,6 +143,10 @@ export class CompactUnsignedIntCodec implements Codec { return BigIntCodec.decode(Buffer.from(value.rest), false) } } + + fromU256(value: bigint): DecodedCompactInt { + return this.decode(this.encodeU256(value)) + } } export const compactUnsignedIntCodec = new CompactUnsignedIntCodec() @@ -244,6 +252,10 @@ export class CompactSignedIntCodec implements Codec { } } + fromI32(value: number): DecodedCompactInt { + return this.decode(this.encodeI32(value)) + } + toI256(value: DecodedCompactInt): bigint { const mode = value.mode & maskRest @@ -254,6 +266,10 @@ export class CompactSignedIntCodec implements Codec { return BigIntCodec.decode(Buffer.from(value.rest), true) } } + + fromI256(value: bigint): DecodedCompactInt { + return this.decode(this.encodeI256(value)) + } } export const compactSignedIntCodec = new CompactSignedIntCodec() diff --git a/packages/web3/src/codec/contract-output-codec.ts b/packages/web3/src/codec/contract-output-codec.ts index ab5b5a291..dcf86c970 100644 --- a/packages/web3/src/codec/contract-output-codec.ts +++ b/packages/web3/src/codec/contract-output-codec.ts @@ -73,20 +73,18 @@ export class ContractOutputCodec implements Codec { } static convertToOutput(apiContractOutput: ApiContractOutput): ContractOutput { - const amount: DecodedCompactInt = compactUnsignedIntCodec.decode( - compactUnsignedIntCodec.encodeU256(BigInt(apiContractOutput.attoAlphAmount)) - ) + const amount: DecodedCompactInt = compactUnsignedIntCodec.fromU256(BigInt(apiContractOutput.attoAlphAmount)) const lockupScript: P2C = lockupScriptCodec.decode(Buffer.from(bs58.decode(apiContractOutput.address))) .script as P2C const tokensValue = apiContractOutput.tokens.map((token) => { return { tokenId: Buffer.from(token.id, 'hex'), - amount: compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU256(BigInt(token.amount))) + amount: compactUnsignedIntCodec.fromU256(BigInt(token.amount)) } }) const tokens: DecodedArray = { - length: compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU32(tokensValue.length)), + length: compactUnsignedIntCodec.fromU32(tokensValue.length), value: tokensValue } diff --git a/packages/web3/src/codec/token-codec.test.ts b/packages/web3/src/codec/token-codec.test.ts index ee42660a5..8727e8c83 100644 --- a/packages/web3/src/codec/token-codec.test.ts +++ b/packages/web3/src/codec/token-codec.test.ts @@ -36,7 +36,7 @@ describe('Encode & decode tokens', function () { function success(tokenIn: { id: string; amount: bigint }) { const token = { tokenId: Buffer.from(tokenIn.id, 'hex'), - amount: compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU256(tokenIn.amount)) + amount: compactUnsignedIntCodec.fromU256(tokenIn.amount) } const encoded = tokenCodec.encode(token) const decoded = tokenCodec.decode(encoded) diff --git a/packages/web3/src/codec/unsigned-tx-codec.ts b/packages/web3/src/codec/unsigned-tx-codec.ts index 81d02f778..9e3618f62 100644 --- a/packages/web3/src/codec/unsigned-tx-codec.ts +++ b/packages/web3/src/codec/unsigned-tx-codec.ts @@ -107,8 +107,8 @@ export class UnsignedTxCodec implements Codec { static fromApiUnsignedTx(unsignedTx: ApiUnsignedTx): UnsignedTx { const version = unsignedTx.version const networkId = unsignedTx.networkId - const gasAmount = compactSignedIntCodec.decode(compactSignedIntCodec.encodeI32(unsignedTx.gasAmount)) - const gasPrice = compactUnsignedIntCodec.decode(compactUnsignedIntCodec.encodeU256(BigInt(unsignedTx.gasPrice))) + const gasAmount = compactSignedIntCodec.fromI32(unsignedTx.gasAmount) + const gasPrice = compactUnsignedIntCodec.fromU256(BigInt(unsignedTx.gasPrice)) const inputsValue = InputCodec.fromAssetInputs(unsignedTx.inputs) const inputs = inputsCodec.fromArray(inputsValue) const fixedOutputsValue = AssetOutputCodec.fromFixedAssetOutputs(unsignedTx.fixedOutputs)