ox 0.14.16 → 0.14.18
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.
- package/CHANGELOG.md +16 -0
- package/_cjs/tempo/TransactionRequest.js +10 -1
- package/_cjs/tempo/TransactionRequest.js.map +1 -1
- package/_cjs/tempo/VirtualAddress.js +70 -0
- package/_cjs/tempo/VirtualAddress.js.map +1 -0
- package/_cjs/tempo/VirtualMaster.js +99 -0
- package/_cjs/tempo/VirtualMaster.js.map +1 -0
- package/_cjs/tempo/ZoneId.js +13 -0
- package/_cjs/tempo/ZoneId.js.map +1 -0
- package/_cjs/tempo/ZoneRpcAuthentication.js +101 -0
- package/_cjs/tempo/ZoneRpcAuthentication.js.map +1 -0
- package/_cjs/tempo/index.js +5 -1
- package/_cjs/tempo/index.js.map +1 -1
- package/_cjs/version.js +1 -1
- package/_esm/tempo/TransactionRequest.js +10 -1
- package/_esm/tempo/TransactionRequest.js.map +1 -1
- package/_esm/tempo/VirtualAddress.js +154 -0
- package/_esm/tempo/VirtualAddress.js.map +1 -0
- package/_esm/tempo/VirtualMaster.js +200 -0
- package/_esm/tempo/VirtualMaster.js.map +1 -0
- package/_esm/tempo/ZoneId.js +47 -0
- package/_esm/tempo/ZoneId.js.map +1 -0
- package/_esm/tempo/ZoneRpcAuthentication.js +256 -0
- package/_esm/tempo/ZoneRpcAuthentication.js.map +1 -0
- package/_esm/tempo/index.js +107 -0
- package/_esm/tempo/index.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_types/core/RpcSchema.d.ts +0 -2
- package/_types/core/RpcSchema.d.ts.map +1 -1
- package/_types/tempo/TransactionRequest.d.ts +6 -4
- package/_types/tempo/TransactionRequest.d.ts.map +1 -1
- package/_types/tempo/VirtualAddress.d.ts +129 -0
- package/_types/tempo/VirtualAddress.d.ts.map +1 -0
- package/_types/tempo/VirtualMaster.d.ts +155 -0
- package/_types/tempo/VirtualMaster.d.ts.map +1 -0
- package/_types/tempo/ZoneId.d.ts +50 -0
- package/_types/tempo/ZoneId.d.ts.map +1 -0
- package/_types/tempo/ZoneRpcAuthentication.d.ts +268 -0
- package/_types/tempo/ZoneRpcAuthentication.d.ts.map +1 -0
- package/_types/tempo/index.d.ts +107 -0
- package/_types/tempo/index.d.ts.map +1 -1
- package/_types/version.d.ts +1 -1
- package/core/RpcSchema.ts +0 -2
- package/package.json +21 -1
- package/tempo/TransactionRequest.test.ts +26 -2
- package/tempo/TransactionRequest.ts +17 -7
- package/tempo/VirtualAddress/package.json +6 -0
- package/tempo/VirtualAddress.test.ts +88 -0
- package/tempo/VirtualAddress.ts +201 -0
- package/tempo/VirtualMaster/package.json +6 -0
- package/tempo/VirtualMaster.test.ts +127 -0
- package/tempo/VirtualMaster.ts +303 -0
- package/tempo/ZoneId/package.json +6 -0
- package/tempo/ZoneId.test.ts +42 -0
- package/tempo/ZoneId.ts +58 -0
- package/tempo/ZoneRpcAuthentication/package.json +6 -0
- package/tempo/ZoneRpcAuthentication.test.ts +226 -0
- package/tempo/ZoneRpcAuthentication.ts +423 -0
- package/tempo/index.ts +107 -8
- package/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# ox
|
|
2
2
|
|
|
3
|
+
## 0.14.18
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#221](https://github.com/wevm/ox/pull/221) [`3b84126`](https://github.com/wevm/ox/commit/3b841266704b2e2bc24359462bafd8acd7a16ec9) Thanks [@tmm](https://github.com/tmm)! - Added [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022) virtual address utilities to `ox/tempo`, including `VirtualAddress` helpers for formatting and parsing virtual addresses and `VirtualMaster` helpers for deriving registration hashes, validating salts, and mining bounded salt ranges.
|
|
8
|
+
|
|
9
|
+
## 0.14.17
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#220](https://github.com/wevm/ox/pull/220) [`da7a62c`](https://github.com/wevm/ox/commit/da7a62cfbecb99b3cc24f275703e33b1320abb1b) Thanks [@Zygimantass](https://github.com/Zygimantass)! - Added Tempo zones support
|
|
14
|
+
|
|
15
|
+
- [#219](https://github.com/wevm/ox/pull/219) [`a934992`](https://github.com/wevm/ox/commit/a934992257add3724f16538c7a14d72e647a2b66) Thanks [@jxom](https://github.com/jxom)! - Added `feePayer` to `TransactionRequest` in `ox/tempo`.
|
|
16
|
+
|
|
17
|
+
- [#217](https://github.com/wevm/ox/pull/217) [`5e2ae4d`](https://github.com/wevm/ox/commit/5e2ae4d9a007bb4071896c5e4c0f258e9a637a54) Thanks [@jxom](https://github.com/jxom)! - Fixed `TransactionRequest.fromRpc` in `ox/tempo`. `TransactionRequest.toRpc` now folds top-level `to`/`data`/`value` into `calls` when `calls` is not provided.
|
|
18
|
+
|
|
3
19
|
## 0.14.16
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -28,7 +28,7 @@ function fromRpc(request) {
|
|
|
28
28
|
return mapped;
|
|
29
29
|
});
|
|
30
30
|
if (typeof request.feeToken !== 'undefined')
|
|
31
|
-
request_.feeToken =
|
|
31
|
+
request_.feeToken = request.feeToken;
|
|
32
32
|
if (request.keyAuthorization)
|
|
33
33
|
request_.keyAuthorization = KeyAuthorization.fromRpc(request.keyAuthorization);
|
|
34
34
|
if (typeof request.validBefore !== 'undefined')
|
|
@@ -52,6 +52,14 @@ function toRpc(request) {
|
|
|
52
52
|
value: call.value ? Hex.fromNumber(call.value) : '0x',
|
|
53
53
|
data: call.data ?? '0x',
|
|
54
54
|
}));
|
|
55
|
+
else if (request.to || request.data || request.value)
|
|
56
|
+
request_rpc.calls = [
|
|
57
|
+
{
|
|
58
|
+
to: request.to ? TempoAddress.resolve(request.to) : undefined,
|
|
59
|
+
value: request.value ? Hex.fromNumber(request.value) : '0x',
|
|
60
|
+
data: request.data ?? '0x',
|
|
61
|
+
},
|
|
62
|
+
];
|
|
55
63
|
if (typeof request.feeToken !== 'undefined')
|
|
56
64
|
request_rpc.feeToken = TokenId.toAddress(request.feeToken);
|
|
57
65
|
if (request.keyAuthorization)
|
|
@@ -70,6 +78,7 @@ function toRpc(request) {
|
|
|
70
78
|
if (nonceKey)
|
|
71
79
|
request_rpc.nonceKey = nonceKey;
|
|
72
80
|
if (typeof request.calls !== 'undefined' ||
|
|
81
|
+
typeof request.feePayer !== 'undefined' ||
|
|
73
82
|
typeof request.feeToken !== 'undefined' ||
|
|
74
83
|
typeof request.keyAuthorization !== 'undefined' ||
|
|
75
84
|
typeof request.nonceKey !== 'undefined' ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionRequest.js","sourceRoot":"","sources":["../../tempo/TransactionRequest.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"TransactionRequest.js","sourceRoot":"","sources":["../../tempo/TransactionRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvalidMagicError = exports.magic = void 0;
|
|
4
|
+
exports.from = from;
|
|
5
|
+
exports.isVirtual = isVirtual;
|
|
6
|
+
exports.parse = parse;
|
|
7
|
+
exports.validate = validate;
|
|
8
|
+
const Address = require("../core/Address.js");
|
|
9
|
+
const Bytes = require("../core/Bytes.js");
|
|
10
|
+
const Errors = require("../core/Errors.js");
|
|
11
|
+
const Hex = require("../core/Hex.js");
|
|
12
|
+
const TempoAddress = require("./TempoAddress.js");
|
|
13
|
+
exports.magic = '0xfdfdfdfdfdfdfdfdfdfd';
|
|
14
|
+
function from(value) {
|
|
15
|
+
return Address.from(Hex.concat(toFixedHex(value.masterId, 4), exports.magic, toFixedHex(value.userTag, 6)));
|
|
16
|
+
}
|
|
17
|
+
function isVirtual(address) {
|
|
18
|
+
try {
|
|
19
|
+
const resolved = resolveAddress(address);
|
|
20
|
+
return Hex.slice(resolved, 4, 14).toLowerCase() === exports.magic;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function parse(address) {
|
|
27
|
+
const resolved = resolveAddress(address);
|
|
28
|
+
if (Hex.slice(resolved, 4, 14).toLowerCase() !== exports.magic)
|
|
29
|
+
throw new InvalidMagicError({ address: resolved });
|
|
30
|
+
return {
|
|
31
|
+
masterId: Hex.slice(resolved, 0, 4),
|
|
32
|
+
userTag: Hex.slice(resolved, 14, 20),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function validate(address) {
|
|
36
|
+
try {
|
|
37
|
+
parse(address);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
class InvalidMagicError extends Errors.BaseError {
|
|
45
|
+
constructor({ address }) {
|
|
46
|
+
super(`Address "${address}" does not contain the TIP-1022 virtual address marker.`);
|
|
47
|
+
Object.defineProperty(this, "name", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: 'VirtualAddress.InvalidMagicError'
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.InvalidMagicError = InvalidMagicError;
|
|
56
|
+
function resolveAddress(address) {
|
|
57
|
+
const resolved = TempoAddress.resolve(address);
|
|
58
|
+
Address.assert(resolved, { strict: false });
|
|
59
|
+
return resolved;
|
|
60
|
+
}
|
|
61
|
+
function toFixedHex(value, size) {
|
|
62
|
+
if (typeof value === 'number' || typeof value === 'bigint')
|
|
63
|
+
return Hex.fromNumber(value, { size });
|
|
64
|
+
if (typeof value === 'string') {
|
|
65
|
+
Hex.assert(value, { strict: true });
|
|
66
|
+
return Hex.padLeft(value, size);
|
|
67
|
+
}
|
|
68
|
+
return Hex.fromBytes(Bytes.padLeft(value, size));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=VirtualAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualAddress.js","sourceRoot":"","sources":["../../tempo/VirtualAddress.ts"],"names":[],"mappings":";;;AAoCA,oBAQC;AA2CD,8BAOC;AAsBD,sBAUC;AAwCD,4BAOC;AA7KD,8CAA6C;AAC7C,0CAAyC;AACzC,4CAA2C;AAC3C,sCAAqC;AACrC,kDAAiD;AAGpC,QAAA,KAAK,GAAG,wBAAiC,CAAA;AA6BtD,SAAgB,IAAI,CAAC,KAAiB;IACpC,OAAO,OAAO,CAAC,IAAI,CACjB,GAAG,CAAC,MAAM,CACR,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAC7B,aAAK,EACL,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAC7B,CACF,CAAA;AACH,CAAC;AA2CD,SAAgB,SAAS,CAAC,OAAe;IACvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,aAAK,CAAA;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAsBD,SAAgB,KAAK,CAAC,OAAe;IACnC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAExC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,aAAK;QACpD,MAAM,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEpD,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC;KACrC,CAAA;AACH,CAAC;AAwCD,SAAgB,QAAQ,CAAC,OAAe;IACtC,IAAI,CAAC;QACH,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAGD,MAAa,iBAAkB,SAAQ,MAAM,CAAC,SAAS;IAGrD,YAAY,EAAE,OAAO,EAAuB;QAC1C,KAAK,CACH,YAAY,OAAO,yDAAyD,CAC7E,CAAA;QALe;;;;mBAAO,kCAAkC;WAAA;IAM3D,CAAC;CACF;AARD,8CAQC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,OAA+B,CAAC,CAAA;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3C,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,KAAW,EAAE,IAAY;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QACxD,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACnC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;AAClD,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRegistrationHash = getRegistrationHash;
|
|
4
|
+
exports.getMasterId = getMasterId;
|
|
5
|
+
exports.validateSalt = validateSalt;
|
|
6
|
+
exports.mineSalt = mineSalt;
|
|
7
|
+
const Address = require("../core/Address.js");
|
|
8
|
+
const Bytes = require("../core/Bytes.js");
|
|
9
|
+
const Errors = require("../core/Errors.js");
|
|
10
|
+
const Hash = require("../core/Hash.js");
|
|
11
|
+
const Hex = require("../core/Hex.js");
|
|
12
|
+
const TempoAddress = require("./TempoAddress.js");
|
|
13
|
+
const VirtualAddress = require("./VirtualAddress.js");
|
|
14
|
+
const tip20Prefix = '0x20c000000000000000000000';
|
|
15
|
+
const zeroAddress = '0x0000000000000000000000000000000000000000';
|
|
16
|
+
function getRegistrationHash(value) {
|
|
17
|
+
return Hash.keccak256(Hex.concat(resolveAddress(value.address), toFixedHex(value.salt, 32)));
|
|
18
|
+
}
|
|
19
|
+
function getMasterId(value) {
|
|
20
|
+
return Hex.slice(getRegistrationHash(value), 4, 8);
|
|
21
|
+
}
|
|
22
|
+
function validateSalt(value) {
|
|
23
|
+
try {
|
|
24
|
+
return hasProofOfWork(Hash.keccak256(Hex.concat(resolveAddress(value.address), toFixedHex(value.salt, 32)), { as: 'Bytes' }));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function mineSalt(value) {
|
|
31
|
+
assertCount(value.count);
|
|
32
|
+
const address = resolveAddress(value.address);
|
|
33
|
+
const addressBytes = Bytes.fromHex(address);
|
|
34
|
+
const saltBytes = toFixedBytes(value.start ?? 0n, 32);
|
|
35
|
+
const input = new Uint8Array(addressBytes.length + saltBytes.length);
|
|
36
|
+
input.set(addressBytes);
|
|
37
|
+
for (let i = 0; i < value.count; i++) {
|
|
38
|
+
input.set(saltBytes, addressBytes.length);
|
|
39
|
+
const registrationHash = Hash.keccak256(input, { as: 'Bytes' });
|
|
40
|
+
if (hasProofOfWork(registrationHash)) {
|
|
41
|
+
return {
|
|
42
|
+
masterId: Hex.fromBytes(registrationHash.subarray(4, 8)),
|
|
43
|
+
registrationHash: Hex.fromBytes(registrationHash),
|
|
44
|
+
salt: Hex.fromBytes(saltBytes),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (i < value.count - 1 && !increment(saltBytes))
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
function hasProofOfWork(hash) {
|
|
53
|
+
return hash[0] === 0 && hash[1] === 0 && hash[2] === 0 && hash[3] === 0;
|
|
54
|
+
}
|
|
55
|
+
function assertCount(count) {
|
|
56
|
+
if (Number.isSafeInteger(count) && count > 0)
|
|
57
|
+
return;
|
|
58
|
+
throw new Errors.BaseError(`Count "${count}" is invalid. Expected a positive safe integer.`);
|
|
59
|
+
}
|
|
60
|
+
function increment(bytes) {
|
|
61
|
+
for (let i = bytes.length - 1; i >= 0; i--) {
|
|
62
|
+
const value = bytes[i];
|
|
63
|
+
if (value === 0xff) {
|
|
64
|
+
bytes[i] = 0;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
bytes[i] = value + 1;
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
function resolveAddress(address) {
|
|
73
|
+
const resolved = TempoAddress.resolve(address);
|
|
74
|
+
Address.assert(resolved, { strict: false });
|
|
75
|
+
assertValidMasterAddress(resolved);
|
|
76
|
+
return resolved;
|
|
77
|
+
}
|
|
78
|
+
function assertValidMasterAddress(address) {
|
|
79
|
+
const normalized = address.toLowerCase();
|
|
80
|
+
if (normalized === zeroAddress)
|
|
81
|
+
throw new Errors.BaseError('Virtual master address cannot be the zero address.');
|
|
82
|
+
if (VirtualAddress.isVirtual(address))
|
|
83
|
+
throw new Errors.BaseError('Virtual master address cannot itself be a virtual address.');
|
|
84
|
+
if (normalized.startsWith(tip20Prefix))
|
|
85
|
+
throw new Errors.BaseError('Virtual master address cannot be a TIP-20 token address.');
|
|
86
|
+
}
|
|
87
|
+
function toFixedBytes(value, size) {
|
|
88
|
+
return Bytes.fromHex(toFixedHex(value, size));
|
|
89
|
+
}
|
|
90
|
+
function toFixedHex(value, size) {
|
|
91
|
+
if (typeof value === 'number' || typeof value === 'bigint')
|
|
92
|
+
return Hex.fromNumber(value, { size });
|
|
93
|
+
if (typeof value === 'string') {
|
|
94
|
+
Hex.assert(value, { strict: true });
|
|
95
|
+
return Hex.padLeft(value, size);
|
|
96
|
+
}
|
|
97
|
+
return Hex.fromBytes(Bytes.padLeft(value, size));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=VirtualMaster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualMaster.js","sourceRoot":"","sources":["../../tempo/VirtualMaster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chainIdBase = void 0;
|
|
4
|
+
exports.fromChainId = fromChainId;
|
|
5
|
+
exports.toChainId = toChainId;
|
|
6
|
+
exports.chainIdBase = 4_217_000_000;
|
|
7
|
+
function fromChainId(chainId) {
|
|
8
|
+
return chainId - exports.chainIdBase;
|
|
9
|
+
}
|
|
10
|
+
function toChainId(zoneId) {
|
|
11
|
+
return exports.chainIdBase + zoneId;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ZoneId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoneId.js","sourceRoot":"","sources":["../../tempo/ZoneId.ts"],"names":[],"mappings":";;;AA0BA,kCAEC;AAuBD,8BAEC;AA9CY,QAAA,WAAW,GAAG,aAAsB,CAAA;AAmBjD,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,OAAO,GAAG,mBAAW,CAAA;AAC9B,CAAC;AAuBD,SAAgB,SAAS,CAAC,MAAc;IACtC,OAAO,mBAAW,GAAG,MAAM,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MissingSignatureError = exports.InvalidSerializedError = exports.version = exports.fieldsSize = exports.magicBytes = exports.headerName = void 0;
|
|
4
|
+
exports.from = from;
|
|
5
|
+
exports.deserialize = deserialize;
|
|
6
|
+
exports.getFields = getFields;
|
|
7
|
+
exports.getSignPayload = getSignPayload;
|
|
8
|
+
exports.hash = hash;
|
|
9
|
+
exports.serialize = serialize;
|
|
10
|
+
const Errors = require("../core/Errors.js");
|
|
11
|
+
const Hash = require("../core/Hash.js");
|
|
12
|
+
const Hex = require("../core/Hex.js");
|
|
13
|
+
const SignatureEnvelope = require("./SignatureEnvelope.js");
|
|
14
|
+
const TempoAddress = require("./TempoAddress.js");
|
|
15
|
+
exports.headerName = 'X-Authorization-Token';
|
|
16
|
+
exports.magicBytes = '0x54656d706f5a6f6e655250430000000000000000000000000000000000000000';
|
|
17
|
+
exports.fieldsSize = 29;
|
|
18
|
+
exports.version = 0;
|
|
19
|
+
function from(authentication, options = {}) {
|
|
20
|
+
const auth = authentication;
|
|
21
|
+
const resolved = {
|
|
22
|
+
...auth,
|
|
23
|
+
version: exports.version,
|
|
24
|
+
};
|
|
25
|
+
if (options.signature)
|
|
26
|
+
return {
|
|
27
|
+
...resolved,
|
|
28
|
+
signature: SignatureEnvelope.from(options.signature),
|
|
29
|
+
};
|
|
30
|
+
return resolved;
|
|
31
|
+
}
|
|
32
|
+
function deserialize(serialized) {
|
|
33
|
+
const size = Hex.size(serialized);
|
|
34
|
+
if (size <= exports.fieldsSize)
|
|
35
|
+
throw new InvalidSerializedError({
|
|
36
|
+
reason: `Serialized authentication must be longer than ${exports.fieldsSize} bytes.`,
|
|
37
|
+
serialized,
|
|
38
|
+
});
|
|
39
|
+
const fieldsOffset = size - exports.fieldsSize;
|
|
40
|
+
const signature = Hex.slice(serialized, 0, fieldsOffset);
|
|
41
|
+
const fields = Hex.slice(serialized, fieldsOffset);
|
|
42
|
+
const parsedVersion = Hex.toNumber(Hex.slice(fields, 0, 1), { size: 1 });
|
|
43
|
+
if (parsedVersion !== exports.version)
|
|
44
|
+
throw new InvalidSerializedError({
|
|
45
|
+
reason: `Unsupported authentication version "${parsedVersion}". Expected "${exports.version}".`,
|
|
46
|
+
serialized,
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
chainId: Hex.toNumber(Hex.slice(fields, 5, 13), { size: 8 }),
|
|
50
|
+
expiresAt: Hex.toNumber(Hex.slice(fields, 21, 29), { size: 8 }),
|
|
51
|
+
issuedAt: Hex.toNumber(Hex.slice(fields, 13, 21), { size: 8 }),
|
|
52
|
+
signature: SignatureEnvelope.deserialize(signature),
|
|
53
|
+
version: exports.version,
|
|
54
|
+
zoneId: Hex.toNumber(Hex.slice(fields, 1, 5), { size: 4 }),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function getFields(authentication) {
|
|
58
|
+
return Hex.concat(Hex.fromNumber(exports.version, { size: 1 }), Hex.fromNumber(authentication.zoneId, { size: 4 }), Hex.fromNumber(authentication.chainId, { size: 8 }), Hex.fromNumber(authentication.issuedAt, { size: 8 }), Hex.fromNumber(authentication.expiresAt, { size: 8 }));
|
|
59
|
+
}
|
|
60
|
+
function getSignPayload(authentication, options = {}) {
|
|
61
|
+
const authHash = hash(authentication);
|
|
62
|
+
if (options.userAddress)
|
|
63
|
+
return Hash.keccak256(Hex.concat('0x04', authHash, TempoAddress.resolve(options.userAddress)));
|
|
64
|
+
return authHash;
|
|
65
|
+
}
|
|
66
|
+
function hash(authentication) {
|
|
67
|
+
return Hash.keccak256(Hex.concat(exports.magicBytes, getFields(authentication)));
|
|
68
|
+
}
|
|
69
|
+
function serialize(authentication, options = {}) {
|
|
70
|
+
const signature = options.signature || authentication.signature;
|
|
71
|
+
if (!signature)
|
|
72
|
+
throw new MissingSignatureError();
|
|
73
|
+
return Hex.concat(SignatureEnvelope.serialize(SignatureEnvelope.from(signature)), getFields(authentication));
|
|
74
|
+
}
|
|
75
|
+
class InvalidSerializedError extends Errors.BaseError {
|
|
76
|
+
constructor({ reason, serialized }) {
|
|
77
|
+
super(`Unable to deserialize Zone RPC authentication: ${reason}`, {
|
|
78
|
+
metaMessages: [`Serialized: ${serialized}`],
|
|
79
|
+
});
|
|
80
|
+
Object.defineProperty(this, "name", {
|
|
81
|
+
enumerable: true,
|
|
82
|
+
configurable: true,
|
|
83
|
+
writable: true,
|
|
84
|
+
value: 'ZoneRpcAuthentication.InvalidSerializedError'
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.InvalidSerializedError = InvalidSerializedError;
|
|
89
|
+
class MissingSignatureError extends Errors.BaseError {
|
|
90
|
+
constructor() {
|
|
91
|
+
super('Zone RPC authentication is missing a signature.');
|
|
92
|
+
Object.defineProperty(this, "name", {
|
|
93
|
+
enumerable: true,
|
|
94
|
+
configurable: true,
|
|
95
|
+
writable: true,
|
|
96
|
+
value: 'ZoneRpcAuthentication.MissingSignatureError'
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.MissingSignatureError = MissingSignatureError;
|
|
101
|
+
//# sourceMappingURL=ZoneRpcAuthentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoneRpcAuthentication.js","sourceRoot":"","sources":["../../tempo/ZoneRpcAuthentication.ts"],"names":[],"mappings":"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"}
|
package/_cjs/tempo/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TxEnvelopeTempo = exports.TransactionRequest = exports.TransactionReceipt = exports.Transaction = exports.TokenRole = exports.TokenId = exports.Tick = exports.TempoAddress = exports.SignatureEnvelope = exports.RpcSchemaTempo = exports.PoolId = exports.Period = exports.KeyAuthorization = exports.AuthorizationTempo = void 0;
|
|
3
|
+
exports.ZoneRpcAuthentication = exports.ZoneId = exports.VirtualMaster = exports.VirtualAddress = exports.TxEnvelopeTempo = exports.TransactionRequest = exports.TransactionReceipt = exports.Transaction = exports.TokenRole = exports.TokenId = exports.Tick = exports.TempoAddress = exports.SignatureEnvelope = exports.RpcSchemaTempo = exports.PoolId = exports.Period = exports.KeyAuthorization = exports.AuthorizationTempo = void 0;
|
|
4
4
|
exports.AuthorizationTempo = require("./AuthorizationTempo.js");
|
|
5
5
|
exports.KeyAuthorization = require("./KeyAuthorization.js");
|
|
6
6
|
exports.Period = require("./Period.js");
|
|
@@ -15,4 +15,8 @@ exports.Transaction = require("./Transaction.js");
|
|
|
15
15
|
exports.TransactionReceipt = require("./TransactionReceipt.js");
|
|
16
16
|
exports.TransactionRequest = require("./TransactionRequest.js");
|
|
17
17
|
exports.TxEnvelopeTempo = require("./TxEnvelopeTempo.js");
|
|
18
|
+
exports.VirtualAddress = require("./VirtualAddress.js");
|
|
19
|
+
exports.VirtualMaster = require("./VirtualMaster.js");
|
|
20
|
+
exports.ZoneId = require("./ZoneId.js");
|
|
21
|
+
exports.ZoneRpcAuthentication = require("./ZoneRpcAuthentication.js");
|
|
18
22
|
//# sourceMappingURL=index.js.map
|
package/_cjs/tempo/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../tempo/index.ts"],"names":[],"mappings":";;;AAoCA,gEAA6D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../tempo/index.ts"],"names":[],"mappings":";;;AAoCA,gEAA6D;AAwC7D,4DAAyD;AA6BzD,wCAAqC;AAsBrC,wCAAqC;AAmBrC,wDAAqD;AAuBrD,8DAA2D;AAmB3D,oDAAiD;AAoBjD,oCAAiC;AAqBjC,0CAAuC;AAkBvC,8CAA2C;AAkD3C,kDAA+C;AAuB/C,gEAA6D;AAqB7D,gEAA6D;AA6B7D,0DAAuD;AA4BvD,wDAAqD;AAwBrD,sDAAmD;AAoBnD,wCAAqC;AAmCrC,sEAAmE"}
|
package/_cjs/version.js
CHANGED
|
@@ -44,7 +44,7 @@ export function fromRpc(request) {
|
|
|
44
44
|
return mapped;
|
|
45
45
|
});
|
|
46
46
|
if (typeof request.feeToken !== 'undefined')
|
|
47
|
-
request_.feeToken =
|
|
47
|
+
request_.feeToken = request.feeToken;
|
|
48
48
|
if (request.keyAuthorization)
|
|
49
49
|
request_.keyAuthorization = KeyAuthorization.fromRpc(request.keyAuthorization);
|
|
50
50
|
if (typeof request.validBefore !== 'undefined')
|
|
@@ -117,6 +117,14 @@ export function toRpc(request) {
|
|
|
117
117
|
value: call.value ? Hex.fromNumber(call.value) : '0x',
|
|
118
118
|
data: call.data ?? '0x',
|
|
119
119
|
}));
|
|
120
|
+
else if (request.to || request.data || request.value)
|
|
121
|
+
request_rpc.calls = [
|
|
122
|
+
{
|
|
123
|
+
to: request.to ? TempoAddress.resolve(request.to) : undefined,
|
|
124
|
+
value: request.value ? Hex.fromNumber(request.value) : '0x',
|
|
125
|
+
data: request.data ?? '0x',
|
|
126
|
+
},
|
|
127
|
+
];
|
|
120
128
|
if (typeof request.feeToken !== 'undefined')
|
|
121
129
|
request_rpc.feeToken = TokenId.toAddress(request.feeToken);
|
|
122
130
|
if (request.keyAuthorization)
|
|
@@ -135,6 +143,7 @@ export function toRpc(request) {
|
|
|
135
143
|
if (nonceKey)
|
|
136
144
|
request_rpc.nonceKey = nonceKey;
|
|
137
145
|
if (typeof request.calls !== 'undefined' ||
|
|
146
|
+
typeof request.feePayer !== 'undefined' ||
|
|
138
147
|
typeof request.feeToken !== 'undefined' ||
|
|
139
148
|
typeof request.keyAuthorization !== 'undefined' ||
|
|
140
149
|
typeof request.nonceKey !== 'undefined' ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionRequest.js","sourceRoot":"","sources":["../../tempo/TransactionRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"TransactionRequest.js","sourceRoot":"","sources":["../../tempo/TransactionRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import * as Address from '../core/Address.js';
|
|
2
|
+
import * as Bytes from '../core/Bytes.js';
|
|
3
|
+
import * as Errors from '../core/Errors.js';
|
|
4
|
+
import * as Hex from '../core/Hex.js';
|
|
5
|
+
import * as TempoAddress from './TempoAddress.js';
|
|
6
|
+
/** Fixed 10-byte marker used by TIP-1022 virtual addresses. */
|
|
7
|
+
export const magic = '0xfdfdfdfdfdfdfdfdfdfd';
|
|
8
|
+
/**
|
|
9
|
+
* Builds a TIP-1022 virtual address from a `masterId` and `userTag`.
|
|
10
|
+
*
|
|
11
|
+
* [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
|
|
12
|
+
*
|
|
13
|
+
* TIP-1022 encodes virtual addresses as:
|
|
14
|
+
* `[4-byte masterId][10-byte VIRTUAL_MAGIC][6-byte userTag]`
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts twoslash
|
|
18
|
+
* import { VirtualAddress } from 'ox/tempo'
|
|
19
|
+
*
|
|
20
|
+
* const address = VirtualAddress.from({
|
|
21
|
+
* masterId: '0x58e21090',
|
|
22
|
+
* userTag: '0x010203040506',
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* address
|
|
26
|
+
* // @log: '0x58e21090fdfdfdfdfdfdfdfdfdfd010203040506'
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @param value - The virtual address parts.
|
|
30
|
+
* @returns The virtual address.
|
|
31
|
+
*/
|
|
32
|
+
export function from(value) {
|
|
33
|
+
return Address.from(Hex.concat(toFixedHex(value.masterId, 4), magic, toFixedHex(value.userTag, 6)));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Checks whether an address matches the TIP-1022 virtual address format.
|
|
37
|
+
*
|
|
38
|
+
* [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
|
|
39
|
+
*
|
|
40
|
+
* This only checks the reserved byte layout, not whether the `masterId`
|
|
41
|
+
* is registered onchain.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts twoslash
|
|
45
|
+
* import { VirtualAddress } from 'ox/tempo'
|
|
46
|
+
*
|
|
47
|
+
* const isVirtual = VirtualAddress.isVirtual(
|
|
48
|
+
* '0x58e21090fdfdfdfdfdfdfdfdfdfd010203040506',
|
|
49
|
+
* )
|
|
50
|
+
*
|
|
51
|
+
* isVirtual
|
|
52
|
+
* // @log: true
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @param address - Address to check.
|
|
56
|
+
* @returns `true` if the address matches the virtual-address layout.
|
|
57
|
+
*/
|
|
58
|
+
export function isVirtual(address) {
|
|
59
|
+
try {
|
|
60
|
+
const resolved = resolveAddress(address);
|
|
61
|
+
return Hex.slice(resolved, 4, 14).toLowerCase() === magic;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parses a TIP-1022 virtual address into its `masterId` and `userTag` parts.
|
|
69
|
+
*
|
|
70
|
+
* [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts twoslash
|
|
74
|
+
* import { VirtualAddress } from 'ox/tempo'
|
|
75
|
+
*
|
|
76
|
+
* const parsed = VirtualAddress.parse(
|
|
77
|
+
* '0x58e21090fdfdfdfdfdfdfdfdfdfd010203040506',
|
|
78
|
+
* )
|
|
79
|
+
*
|
|
80
|
+
* parsed
|
|
81
|
+
* // @log: { masterId: '0x58e21090', userTag: '0x010203040506' }
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @param address - The virtual address to parse.
|
|
85
|
+
* @returns The decoded virtual address components.
|
|
86
|
+
*/
|
|
87
|
+
export function parse(address) {
|
|
88
|
+
const resolved = resolveAddress(address);
|
|
89
|
+
if (Hex.slice(resolved, 4, 14).toLowerCase() !== magic)
|
|
90
|
+
throw new InvalidMagicError({ address: resolved });
|
|
91
|
+
return {
|
|
92
|
+
masterId: Hex.slice(resolved, 0, 4),
|
|
93
|
+
userTag: Hex.slice(resolved, 14, 20),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Validates that an address matches the TIP-1022 virtual address format.
|
|
98
|
+
*
|
|
99
|
+
* [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
|
|
100
|
+
*
|
|
101
|
+
* This only validates the reserved byte layout, not whether the `masterId`
|
|
102
|
+
* resolves to a registered master onchain.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts twoslash
|
|
106
|
+
* import { VirtualAddress } from 'ox/tempo'
|
|
107
|
+
*
|
|
108
|
+
* const valid = VirtualAddress.validate(
|
|
109
|
+
* '0x58e21090fdfdfdfdfdfdfdfdfdfd010203040506',
|
|
110
|
+
* )
|
|
111
|
+
*
|
|
112
|
+
* valid
|
|
113
|
+
* // @log: true
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @param address - Address to validate.
|
|
117
|
+
* @returns `true` if the address has a valid virtual-address layout.
|
|
118
|
+
*/
|
|
119
|
+
export function validate(address) {
|
|
120
|
+
try {
|
|
121
|
+
parse(address);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Thrown when an address does not contain the TIP-1022 virtual marker. */
|
|
129
|
+
export class InvalidMagicError extends Errors.BaseError {
|
|
130
|
+
constructor({ address }) {
|
|
131
|
+
super(`Address "${address}" does not contain the TIP-1022 virtual address marker.`);
|
|
132
|
+
Object.defineProperty(this, "name", {
|
|
133
|
+
enumerable: true,
|
|
134
|
+
configurable: true,
|
|
135
|
+
writable: true,
|
|
136
|
+
value: 'VirtualAddress.InvalidMagicError'
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function resolveAddress(address) {
|
|
141
|
+
const resolved = TempoAddress.resolve(address);
|
|
142
|
+
Address.assert(resolved, { strict: false });
|
|
143
|
+
return resolved;
|
|
144
|
+
}
|
|
145
|
+
function toFixedHex(value, size) {
|
|
146
|
+
if (typeof value === 'number' || typeof value === 'bigint')
|
|
147
|
+
return Hex.fromNumber(value, { size });
|
|
148
|
+
if (typeof value === 'string') {
|
|
149
|
+
Hex.assert(value, { strict: true });
|
|
150
|
+
return Hex.padLeft(value, size);
|
|
151
|
+
}
|
|
152
|
+
return Hex.fromBytes(Bytes.padLeft(value, size));
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=VirtualAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualAddress.js","sourceRoot":"","sources":["../../tempo/VirtualAddress.ts"],"names":[],"mappings":"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"}
|