@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 =
|
|
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(
|
|
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":";;;AAiBA,+CAA0C;AAC1C,2DAA+C;AAC/C,+DAAwD;AACxD,uDAAkD;AAClD,yDAAgE;AAChE,+
|
|
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 {
|
|
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 =
|
|
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(
|
|
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":"AAiBA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAc,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,
|
|
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
|
@@ -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 {
|
|
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 =
|
|
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(
|
|
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),
|