@alephium/web3 3.0.3 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,19 @@ const hash_1 = require("./hash");
11
11
  const utils_1 = require("../utils");
12
12
  const codec_1 = require("./codec");
13
13
  const token_codec_1 = require("./token-codec");
14
+ const address_1 = require("../address");
15
+ function createGroupedHint(input, group) {
16
+ const initialHint = (0, hash_1.createHint)(input);
17
+ const newByte0 = ((initialHint >> 24) & 0xff) ^ (0, utils_1.xorByte)(initialHint) ^ (group & 0xff);
18
+ const newHintValue = ((newByte0 & 0xff) << 24) | (initialHint & 0x00ffffff);
19
+ return newHintValue | 1;
20
+ }
21
+ function createP2PKHint(outputLockupScript) {
22
+ return createGroupedHint(outputLockupScript.publicKeyLike.value, outputLockupScript.group);
23
+ }
24
+ function createP2HMPKHint(outputLockupScript) {
25
+ return createGroupedHint(outputLockupScript.hash, outputLockupScript.group);
26
+ }
14
27
  class AssetOutputCodec extends codec_1.ObjectCodec {
15
28
  static toFixedAssetOutputs(txIdBytes, outputs) {
16
29
  return outputs.map((output, index) => AssetOutputCodec.toFixedAssetOutput(txIdBytes, output, index));
@@ -28,7 +41,7 @@ class AssetOutputCodec extends codec_1.ObjectCodec {
28
41
  const scriptType = output.lockupScript.kind;
29
42
  const key = (0, utils_1.binToHex)((0, hash_1.blakeHash)((0, utils_1.concatBytes)([txIdBytes, int_as_4bytes_codec_1.intAs4BytesCodec.encode(index)])));
30
43
  const outputLockupScript = output.lockupScript.value;
31
- const address = utils_1.bs58.encode(lockup_script_codec_1.lockupScriptCodec.encode(output.lockupScript));
44
+ const address = (0, address_1.addressFromLockupScript)(output.lockupScript);
32
45
  let hint = undefined;
33
46
  if (scriptType === 'P2PKH') {
34
47
  hint = (0, hash_1.createHint)(outputLockupScript);
@@ -39,6 +52,12 @@ class AssetOutputCodec extends codec_1.ObjectCodec {
39
52
  else if (scriptType === 'P2SH') {
40
53
  hint = (0, hash_1.createHint)(outputLockupScript);
41
54
  }
55
+ else if (scriptType === 'P2PK') {
56
+ hint = createP2PKHint(outputLockupScript);
57
+ }
58
+ else if (scriptType === 'P2HMPK') {
59
+ hint = createP2HMPKHint(outputLockupScript);
60
+ }
42
61
  else if (scriptType === 'P2C') {
43
62
  throw new Error(`P2C script type not allowed for asset output`);
44
63
  }
@@ -55,7 +74,7 @@ class AssetOutputCodec extends codec_1.ObjectCodec {
55
74
  static fromFixedAssetOutput(fixedOutput) {
56
75
  const amount = BigInt(fixedOutput.attoAlphAmount);
57
76
  const lockTime = BigInt(fixedOutput.lockTime);
58
- const lockupScript = lockup_script_codec_1.lockupScriptCodec.decode(utils_1.bs58.decode(fixedOutput.address));
77
+ const lockupScript = lockup_script_codec_1.lockupScriptCodec.decode((0, address_1.addressToBytes)(fixedOutput.address));
59
78
  const tokens = fixedOutput.tokens.map((token) => {
60
79
  return {
61
80
  tokenId: (0, utils_1.hexToBinUnsafe)(token.id),
@@ -1 +1 @@
1
- {"version":3,"file":"asset-output-codec.js","sourceRoot":"","sources":["../../../src/codec/asset-output-codec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset-output-codec.js","sourceRoot":"","sources":["../../../src/codec/asset-output-codec.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,22 @@ import { timestampCodec } from './timestamp-codec.js';
5
5
  import { byteStringCodec } from './bytestring-codec.js';
6
6
  import { lockupScriptCodec } from './lockup-script-codec.js';
7
7
  import { blakeHash, createHint } from './hash.js';
8
- import { bs58, binToHex, hexToBinUnsafe, concatBytes } from '../utils/index.js';
8
+ import { binToHex, hexToBinUnsafe, concatBytes, xorByte } from '../utils/index.js';
9
9
  import { ObjectCodec } from './codec.js';
10
10
  import { tokensCodec } from './token-codec.js';
11
+ import { addressFromLockupScript, addressToBytes } from '../address/index.js';
12
+ function createGroupedHint(input, group) {
13
+ const initialHint = createHint(input);
14
+ const newByte0 = ((initialHint >> 24) & 0xff) ^ xorByte(initialHint) ^ (group & 0xff);
15
+ const newHintValue = ((newByte0 & 0xff) << 24) | (initialHint & 0x00ffffff);
16
+ return newHintValue | 1;
17
+ }
18
+ function createP2PKHint(outputLockupScript) {
19
+ return createGroupedHint(outputLockupScript.publicKeyLike.value, outputLockupScript.group);
20
+ }
21
+ function createP2HMPKHint(outputLockupScript) {
22
+ return createGroupedHint(outputLockupScript.hash, outputLockupScript.group);
23
+ }
11
24
  export class AssetOutputCodec extends ObjectCodec {
12
25
  static toFixedAssetOutputs(txIdBytes, outputs) {
13
26
  return outputs.map((output, index) => AssetOutputCodec.toFixedAssetOutput(txIdBytes, output, index));
@@ -25,7 +38,7 @@ export class AssetOutputCodec extends ObjectCodec {
25
38
  const scriptType = output.lockupScript.kind;
26
39
  const key = binToHex(blakeHash(concatBytes([txIdBytes, intAs4BytesCodec.encode(index)])));
27
40
  const outputLockupScript = output.lockupScript.value;
28
- const address = bs58.encode(lockupScriptCodec.encode(output.lockupScript));
41
+ const address = addressFromLockupScript(output.lockupScript);
29
42
  let hint = undefined;
30
43
  if (scriptType === 'P2PKH') {
31
44
  hint = createHint(outputLockupScript);
@@ -36,6 +49,12 @@ export class AssetOutputCodec extends ObjectCodec {
36
49
  else if (scriptType === 'P2SH') {
37
50
  hint = createHint(outputLockupScript);
38
51
  }
52
+ else if (scriptType === 'P2PK') {
53
+ hint = createP2PKHint(outputLockupScript);
54
+ }
55
+ else if (scriptType === 'P2HMPK') {
56
+ hint = createP2HMPKHint(outputLockupScript);
57
+ }
39
58
  else if (scriptType === 'P2C') {
40
59
  throw new Error(`P2C script type not allowed for asset output`);
41
60
  }
@@ -52,7 +71,7 @@ export class AssetOutputCodec extends ObjectCodec {
52
71
  static fromFixedAssetOutput(fixedOutput) {
53
72
  const amount = BigInt(fixedOutput.attoAlphAmount);
54
73
  const lockTime = BigInt(fixedOutput.lockTime);
55
- const lockupScript = lockupScriptCodec.decode(bs58.decode(fixedOutput.address));
74
+ const lockupScript = lockupScriptCodec.decode(addressToBytes(fixedOutput.address));
56
75
  const tokens = fixedOutput.tokens.map((token) => {
57
76
  return {
58
77
  tokenId: hexToBinUnsafe(token.id),
@@ -1 +1 @@
1
- {"version":3,"file":"asset-output-codec.js","sourceRoot":"","sources":["../../../src/codec/asset-output-codec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset-output-codec.js","sourceRoot":"","sources":["../../../src/codec/asset-output-codec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alephium/web3",
3
- "version": "3.0.3",
3
+ "version": "3.0.4",
4
4
  "description": "A JS/TS library to interact with the Alephium platform",
5
5
  "license": "GPL",
6
6
  "type": "commonjs",
@@ -20,12 +20,13 @@ import { u256Codec } from './compact-int-codec'
20
20
  import { intAs4BytesCodec } from './int-as-4bytes-codec'
21
21
  import { timestampCodec } from './timestamp-codec'
22
22
  import { ByteString, byteStringCodec } from './bytestring-codec'
23
- import { LockupScript, P2MPKH, P2PKH, P2SH, lockupScriptCodec } from './lockup-script-codec'
23
+ import { LockupScript, P2HMPK, P2MPKH, P2PK, P2PKH, P2SH, lockupScriptCodec } from './lockup-script-codec'
24
24
  import { FixedAssetOutput } from '../api/api-alephium'
25
25
  import { blakeHash, createHint } from './hash'
26
- import { bs58, binToHex, hexToBinUnsafe, concatBytes } from '../utils'
26
+ import { binToHex, hexToBinUnsafe, concatBytes, xorByte } from '../utils'
27
27
  import { ObjectCodec } from './codec'
28
28
  import { Token, tokensCodec } from './token-codec'
29
+ import { addressFromLockupScript, addressToBytes } from '../address'
29
30
 
30
31
  export interface AssetOutput {
31
32
  amount: bigint
@@ -35,6 +36,21 @@ export interface AssetOutput {
35
36
  additionalData: ByteString
36
37
  }
37
38
 
39
+ function createGroupedHint(input: Uint8Array, group: number): number {
40
+ const initialHint = createHint(input)
41
+ const newByte0 = ((initialHint >> 24) & 0xff) ^ xorByte(initialHint) ^ (group & 0xff)
42
+ const newHintValue = ((newByte0 & 0xff) << 24) | (initialHint & 0x00ffffff)
43
+ return newHintValue | 1
44
+ }
45
+
46
+ function createP2PKHint(outputLockupScript: P2PK): number {
47
+ return createGroupedHint(outputLockupScript.publicKeyLike.value, outputLockupScript.group)
48
+ }
49
+
50
+ function createP2HMPKHint(outputLockupScript: P2HMPK): number {
51
+ return createGroupedHint(outputLockupScript.hash, outputLockupScript.group)
52
+ }
53
+
38
54
  export class AssetOutputCodec extends ObjectCodec<AssetOutput> {
39
55
  static toFixedAssetOutputs(txIdBytes: Uint8Array, outputs: AssetOutput[]): FixedAssetOutput[] {
40
56
  return outputs.map((output, index) => AssetOutputCodec.toFixedAssetOutput(txIdBytes, output, index))
@@ -53,7 +69,7 @@ export class AssetOutputCodec extends ObjectCodec<AssetOutput> {
53
69
  const scriptType = output.lockupScript.kind
54
70
  const key = binToHex(blakeHash(concatBytes([txIdBytes, intAs4BytesCodec.encode(index)])))
55
71
  const outputLockupScript = output.lockupScript.value
56
- const address = bs58.encode(lockupScriptCodec.encode(output.lockupScript))
72
+ const address = addressFromLockupScript(output.lockupScript)
57
73
 
58
74
  let hint: number | undefined = undefined
59
75
  if (scriptType === 'P2PKH') {
@@ -62,6 +78,10 @@ export class AssetOutputCodec extends ObjectCodec<AssetOutput> {
62
78
  hint = createHint((outputLockupScript as P2MPKH).publicKeyHashes[0])
63
79
  } else if (scriptType === 'P2SH') {
64
80
  hint = createHint(outputLockupScript as P2SH)
81
+ } else if (scriptType === 'P2PK') {
82
+ hint = createP2PKHint(outputLockupScript as P2PK)
83
+ } else if (scriptType === 'P2HMPK') {
84
+ hint = createP2HMPKHint(outputLockupScript as P2HMPK)
65
85
  } else if (scriptType === 'P2C') {
66
86
  throw new Error(`P2C script type not allowed for asset output`)
67
87
  } else {
@@ -80,7 +100,7 @@ export class AssetOutputCodec extends ObjectCodec<AssetOutput> {
80
100
  static fromFixedAssetOutput(fixedOutput: FixedAssetOutput): AssetOutput {
81
101
  const amount = BigInt(fixedOutput.attoAlphAmount)
82
102
  const lockTime = BigInt(fixedOutput.lockTime)
83
- const lockupScript: LockupScript = lockupScriptCodec.decode(bs58.decode(fixedOutput.address))
103
+ const lockupScript: LockupScript = lockupScriptCodec.decode(addressToBytes(fixedOutput.address))
84
104
  const tokens = fixedOutput.tokens.map((token) => {
85
105
  return {
86
106
  tokenId: hexToBinUnsafe(token.id),