phantasma-sdk-ts 0.2.0-rc.1 → 0.2.0-rc.10
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/README.md +41 -0
- package/dist/core/link/easyConnect.d.ts +2 -0
- package/dist/core/link/easyConnect.d.ts.map +1 -1
- package/dist/core/link/easyConnect.js +14 -2
- package/dist/core/link/phantasmaLink.d.ts +3 -0
- package/dist/core/link/phantasmaLink.d.ts.map +1 -1
- package/dist/core/link/phantasmaLink.js +53 -2
- package/dist/core/rpc/phantasma.d.ts +1 -1
- package/dist/core/rpc/phantasma.d.ts.map +1 -1
- package/dist/core/rpc/phantasma.js +2 -2
- package/dist/core/types/Address.d.ts +1 -0
- package/dist/core/types/Address.d.ts.map +1 -1
- package/dist/core/types/Address.js +6 -0
- package/dist/core/types/Carbon/Blockchain/Extensions/index.d.ts +2 -0
- package/dist/core/types/Carbon/Blockchain/Extensions/index.d.ts.map +1 -0
- package/dist/core/types/Carbon/Blockchain/Extensions/index.js +17 -0
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/NftRomBuilder.d.ts +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/NftRomBuilder.js +3 -3
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/SeriesInfoBuilder.d.ts +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/SeriesInfoBuilder.js +2 -2
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenInfoBuilder.d.ts +9 -0
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenInfoBuilder.d.ts.map +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenInfoBuilder.js +38 -2
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.d.ts +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.d.ts.map +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.js +7 -3
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenSchemasBuilder.d.ts +3 -3
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenSchemasBuilder.js +6 -6
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenSeriesMetadataBuilder.d.ts +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenSeriesMetadataBuilder.js +2 -2
- package/dist/core/types/Carbon/Blockchain/Modules/TokenHelper.d.ts +5 -0
- package/dist/core/types/Carbon/Blockchain/Modules/TokenHelper.d.ts.map +1 -0
- package/dist/core/types/Carbon/Blockchain/Modules/TokenHelper.js +16 -0
- package/dist/core/types/Carbon/Blockchain/Modules/index.d.ts +2 -0
- package/dist/core/types/Carbon/Blockchain/Modules/index.d.ts.map +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/index.js +2 -0
- package/dist/core/types/Carbon/Blockchain/TxHelpers/MintNonFungibleTxHelper.d.ts +1 -0
- package/dist/core/types/Carbon/Blockchain/TxHelpers/MintNonFungibleTxHelper.d.ts.map +1 -1
- package/dist/core/types/Carbon/Blockchain/TxHelpers/MintNonFungibleTxHelper.js +14 -1
- package/dist/core/types/Carbon/Blockchain/index.d.ts +4 -0
- package/dist/core/types/Carbon/Blockchain/index.d.ts.map +1 -1
- package/dist/core/types/Carbon/Blockchain/index.js +4 -0
- package/dist/core/types/Carbon/IntX.d.ts +1 -0
- package/dist/core/types/Carbon/IntX.d.ts.map +1 -1
- package/dist/core/types/Carbon/IntX.js +7 -0
- package/dist/core/types/Carbon/index.d.ts +1 -0
- package/dist/core/types/Carbon/index.d.ts.map +1 -1
- package/dist/core/types/Carbon/index.js +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -653,6 +653,10 @@ link.invokeScript(script, callback); //Allows you to do a ReadOnly script operat
|
|
|
653
653
|
link.signTx(nexus, script, payload, callback, onErrorCallback); //Signs a Transaction via Wallet (payload can be Null) (Sends results as an Argument to Callback Function)
|
|
654
654
|
```
|
|
655
655
|
|
|
656
|
+
```javascript
|
|
657
|
+
link.signCarbonTxAndBroadcast(txMsg, onSuccess, onErrorCallback); //Signs & broadcasts a Carbon TxMsg via wallets that support Phantasma Link v4+
|
|
658
|
+
```
|
|
659
|
+
|
|
656
660
|
```javascript
|
|
657
661
|
link.signTxPow(nexus, script, payload, proofOfWork, callback, onErrorCallback); //Signs a Transaction via Wallet with ProofOfWork Attached (Used for Contract Deployment)
|
|
658
662
|
|
|
@@ -722,6 +726,37 @@ link.login(
|
|
|
722
726
|
); //Swap out ecto for 'poltergeist' if wanting to connect to Poltergeist Wallet
|
|
723
727
|
```
|
|
724
728
|
|
|
729
|
+
### Carbon Transactions (Link v4+)
|
|
730
|
+
|
|
731
|
+
Wallets that expose Phantasma Link v4 (or higher) can sign and broadcast Carbon `TxMsg` payloads directly. Make sure you log in with `version = 4` when calling `link.login`, then forward the message via `signCarbonTxAndBroadcast`. The wallet will return a serialized `SignedTxMsg` blob that can be re-used locally if needed.
|
|
732
|
+
|
|
733
|
+
```javascript
|
|
734
|
+
import {
|
|
735
|
+
TxMsg,
|
|
736
|
+
TxTypes,
|
|
737
|
+
SmallString,
|
|
738
|
+
TxMsgTransferFungible,
|
|
739
|
+
Bytes32,
|
|
740
|
+
PhantasmaAPI,
|
|
741
|
+
} from 'phantasma-sdk-ts';
|
|
742
|
+
|
|
743
|
+
const api = new PhantasmaAPI('https://pharpc1.phantasma.info/rpc', null, 'mainnet');
|
|
744
|
+
|
|
745
|
+
const txMsg = new TxMsg(
|
|
746
|
+
TxTypes.TransferFungible,
|
|
747
|
+
BigInt(Math.floor(Date.now() / 1000) + 300), // expiry (UTC seconds)
|
|
748
|
+
100000n, // max gas
|
|
749
|
+
0n,
|
|
750
|
+
new Bytes32(senderPublicKeyBytes), // sender address as 32-byte buffer
|
|
751
|
+
SmallString.empty,
|
|
752
|
+
new TxMsgTransferFungible(new Bytes32(receiverPublicKeyBytes), 1n, 10_00000000n)
|
|
753
|
+
);
|
|
754
|
+
|
|
755
|
+
link.signCarbonTxAndBroadcast(txMsg, async ({ signedTx }) => {
|
|
756
|
+
await api.sendCarbonTransaction(signedTx);
|
|
757
|
+
});
|
|
758
|
+
```
|
|
759
|
+
|
|
725
760
|
## EasyConnect
|
|
726
761
|
|
|
727
762
|
EasyConnect is a plug and play wrapper for PhantasmaLink that makes creating a DApp simple and easy.
|
|
@@ -747,6 +782,10 @@ link.disconnect(_message: string); //Allows you to disconnect from the wallet wi
|
|
|
747
782
|
link.signTransaction(script: string, payload: string, onSuccess, onFail); //Used to send a transaction to Wallet
|
|
748
783
|
```
|
|
749
784
|
|
|
785
|
+
```javascript
|
|
786
|
+
link.signCarbonTransaction(txMsg, onSuccess, onFail); //Sends a Carbon TxMsg to the connected wallet (Link v4+)
|
|
787
|
+
```
|
|
788
|
+
|
|
750
789
|
```javascript
|
|
751
790
|
link.signData(data:any, onSuccess, onFail); //Allows you to sign data with a wallet keypair
|
|
752
791
|
```
|
|
@@ -792,6 +831,8 @@ export enum ProofOfWork {
|
|
|
792
831
|
}
|
|
793
832
|
```
|
|
794
833
|
|
|
834
|
+
> **Note:** Carbon helpers require a Phantasma Link v4 (or newer) session. When instantiating EasyConnect pass `[4, 'phantasma', providerHint]` (or change `requiredVersion`) before calling `connect`, otherwise wallets will reject Carbon signing requests.
|
|
835
|
+
|
|
795
836
|
### Query Function
|
|
796
837
|
|
|
797
838
|
The Query function is an async function that also allows you to use callbacks. You can use it is a promise, or in a chain!
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PhantasmaLink } from './phantasmaLink';
|
|
2
2
|
import { ProofOfWork } from './interfaces/ProofOfWork';
|
|
3
3
|
import { EasyScript, Nexus } from './easyScript';
|
|
4
|
+
import { TxMsg } from '../types/Carbon/Blockchain';
|
|
4
5
|
export declare class EasyConnect {
|
|
5
6
|
requiredVersion: number;
|
|
6
7
|
platform: string;
|
|
@@ -17,6 +18,7 @@ export declare class EasyConnect {
|
|
|
17
18
|
action(_type?: string, _arguments?: Array<any>, onSuccess?: any, onFail?: any): Promise<void>;
|
|
18
19
|
signTransaction(script: string, payload?: any, onSuccess?: any, onFail?: any): void;
|
|
19
20
|
signData(data: any, onSuccess?: any, onFail?: any): void;
|
|
21
|
+
signCarbonTransaction(txMsg: TxMsg, onSuccess?: any, onFail?: any): void;
|
|
20
22
|
invokeScript(script: string, _callback: any): void;
|
|
21
23
|
deployContract(script: string, payload?: any, proofOfWork?: ProofOfWork, onSuccess?: any, onFail?: any): void;
|
|
22
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easyConnect.d.ts","sourceRoot":"","sources":["../../../src/core/link/easyConnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"easyConnect.d.ts","sourceRoot":"","sources":["../../../src/core/link/easyConnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEnD,qBAAa,WAAW;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;gBAED,QAAQ,GAAE,KAAK,CAAC,MAAM,CAAQ;IAyB1C,SAAS,CAAC,SAAS,EAAE,MAAM;IAwB3B,OAAO,CACL,SAAS,GAAE,GAAkB,EAC7B,MAAM,GAAE,GAEP;IA0BH,UAAU,CAAC,QAAQ,GAAE,MAA6B;IAK5C,KAAK,CACT,KAAK,GAAE,MAAa,EACpB,UAAU,GAAE,KAAK,CAAC,MAAM,CAAQ,EAChC,SAAS,GAAE,GAEV;IA4CG,MAAM,CACV,KAAK,GAAE,MAAa,EACpB,UAAU,GAAE,KAAK,CAAC,GAAG,CAAQ,EAC7B,SAAS,GAAE,GAAkB,EAC7B,MAAM,GAAE,GAEP;IAyBH,eAAe,CACb,MAAM,EAAE,MAAM,EACd,OAAO,MAAO,EACd,SAAS,GAAE,GAAkB,EAC7B,MAAM,GAAE,GAEP;IAKH,QAAQ,CACN,IAAI,EAAE,GAAG,EACT,SAAS,GAAE,GAAkB,EAC7B,MAAM,GAAE,GAEP;IAKH,qBAAqB,CACnB,KAAK,EAAE,KAAK,EACZ,SAAS,GAAE,GAAkB,EAC7B,MAAM,GAAE,GAEP;IAWH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;IAI3C,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,MAAO,EACd,WAAW,GAAE,WAAiC,EAC9C,SAAS,GAAE,GAAkB,EAC7B,MAAM,GAAE,GAEP;CAIJ"}
|
|
@@ -11,7 +11,7 @@ class EasyConnect {
|
|
|
11
11
|
this.script = new easyScript_1.EasyScript();
|
|
12
12
|
this.link = new phantasmaLink_1.PhantasmaLink('easyConnect', false);
|
|
13
13
|
this.connected = false;
|
|
14
|
-
this.requiredVersion =
|
|
14
|
+
this.requiredVersion = 4;
|
|
15
15
|
//Make This Auto In Future
|
|
16
16
|
this.nexus = easyScript_1.Nexus.Mainnet;
|
|
17
17
|
if (_options == null) {
|
|
@@ -30,7 +30,7 @@ class EasyConnect {
|
|
|
30
30
|
this.script = new easyScript_1.EasyScript();
|
|
31
31
|
}
|
|
32
32
|
setConfig(_provider) {
|
|
33
|
-
this.requiredVersion =
|
|
33
|
+
this.requiredVersion = 4;
|
|
34
34
|
this.platform = 'phantasma';
|
|
35
35
|
switch (_provider) {
|
|
36
36
|
case 'auto':
|
|
@@ -147,6 +147,18 @@ class EasyConnect {
|
|
|
147
147
|
}) {
|
|
148
148
|
this.link.signData(data, onSuccess, onFail);
|
|
149
149
|
}
|
|
150
|
+
signCarbonTransaction(txMsg, onSuccess = (data) => { }, onFail = (data) => {
|
|
151
|
+
console.log('%cError: ' + data, 'color:red');
|
|
152
|
+
}) {
|
|
153
|
+
if (this.connected == true) {
|
|
154
|
+
this.link.signCarbonTxAndBroadcast(txMsg, onSuccess, onFail);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const message = 'Wallet is not connected';
|
|
158
|
+
console.log('%c' + message, 'color:red');
|
|
159
|
+
onFail(message);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
150
162
|
invokeScript(script, _callback) {
|
|
151
163
|
this.link.invokeScript(script, _callback);
|
|
152
164
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProofOfWork } from './interfaces/ProofOfWork';
|
|
2
2
|
import { IAccount } from './interfaces/IAccount';
|
|
3
|
+
import { TxMsg } from '../types/Carbon/Blockchain';
|
|
3
4
|
export declare class PhantasmaLink {
|
|
4
5
|
host: string;
|
|
5
6
|
dapp: any;
|
|
@@ -22,6 +23,7 @@ export declare class PhantasmaLink {
|
|
|
22
23
|
login(onLoginCallback: (success: boolean) => void, onErrorCallback: (message: string) => void, version?: number, platform?: string, providerHint?: string): void;
|
|
23
24
|
invokeScript(script: string, callback: (message: string) => void): void;
|
|
24
25
|
signTx(script: any, payload: string | null, callback: (arg0: string) => void, onErrorCallback: () => void, pow?: ProofOfWork, signature?: string): void;
|
|
26
|
+
signCarbonTxAndBroadcast(txMsg: TxMsg, callback?: (result: any) => void, onErrorCallback?: (message?: string) => void): void;
|
|
25
27
|
signTxSignature(tx: string, callback: (result: string) => void, onErrorCallback: () => void, signature?: string): void;
|
|
26
28
|
multiSig(subject: string, callback: (result: string) => void, onErrorCallback: () => void, signature?: string): void;
|
|
27
29
|
getPeer(callback: (result: string) => void, onErrorCallback: () => void): void;
|
|
@@ -37,5 +39,6 @@ export declare class PhantasmaLink {
|
|
|
37
39
|
get dappID(): any;
|
|
38
40
|
sendLinkRequest(request: string, callback: (T: any) => void): void;
|
|
39
41
|
disconnect(triggered: string | boolean | undefined): void;
|
|
42
|
+
private serializeCarbonTx;
|
|
40
43
|
}
|
|
41
44
|
//# sourceMappingURL=phantasmaLink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phantasmaLink.d.ts","sourceRoot":"","sources":["../../../src/core/link/phantasmaLink.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"phantasmaLink.d.ts","sourceRoot":"","sources":["../../../src/core/link/phantasmaLink.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PhantasmaLink = void 0;
|
|
4
4
|
const vm_1 = require("../vm");
|
|
5
5
|
const ProofOfWork_1 = require("./interfaces/ProofOfWork");
|
|
6
|
+
const CarbonBlob_1 = require("../types/Carbon/CarbonBlob");
|
|
7
|
+
const Hex_1 = require("../utils/Hex");
|
|
6
8
|
class PhantasmaLink {
|
|
7
9
|
//Construct The Link
|
|
8
10
|
constructor(dappID, logging = true) {
|
|
@@ -13,7 +15,7 @@ class PhantasmaLink {
|
|
|
13
15
|
console.log(msg);
|
|
14
16
|
}
|
|
15
17
|
};
|
|
16
|
-
this.version =
|
|
18
|
+
this.version = 4;
|
|
17
19
|
this.nexus = 'testnet';
|
|
18
20
|
this.chain = 'main';
|
|
19
21
|
this.platform = 'poltergeist';
|
|
@@ -33,7 +35,7 @@ class PhantasmaLink {
|
|
|
33
35
|
this.onError = function (message) { }; //Does Nothing for Now
|
|
34
36
|
}
|
|
35
37
|
//Connect To Wallet
|
|
36
|
-
login(onLoginCallback, onErrorCallback, version =
|
|
38
|
+
login(onLoginCallback, onErrorCallback, version = 4, platform = 'phantasma', providerHint = 'poltergeist') {
|
|
37
39
|
this.providerHint = providerHint;
|
|
38
40
|
this.onLogin = onLoginCallback;
|
|
39
41
|
this.onError = onErrorCallback;
|
|
@@ -136,6 +138,51 @@ class PhantasmaLink {
|
|
|
136
138
|
});
|
|
137
139
|
}
|
|
138
140
|
// Wallet Transaction Signing
|
|
141
|
+
signCarbonTxAndBroadcast(txMsg, callback = () => { }, onErrorCallback = () => { }) {
|
|
142
|
+
if (!txMsg) {
|
|
143
|
+
const message = 'Error: Invalid Carbon transaction message';
|
|
144
|
+
this.onMessage(message);
|
|
145
|
+
onErrorCallback(message);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (this.version < 4) {
|
|
149
|
+
const message = 'Carbon transactions require a wallet that supports Phantasma Link v4 or higher. Please reconnect with version 4+.';
|
|
150
|
+
this.onMessage(message);
|
|
151
|
+
if (onErrorCallback) {
|
|
152
|
+
onErrorCallback(message);
|
|
153
|
+
}
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
let txHex;
|
|
157
|
+
try {
|
|
158
|
+
txHex = this.serializeCarbonTx(txMsg);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
const message = 'Error: Unable to serialize Carbon transaction';
|
|
162
|
+
this.onMessage(message + (err?.message ? ` (${err.message})` : ''));
|
|
163
|
+
onErrorCallback(message);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (txHex.length >= 65536) {
|
|
167
|
+
const message = 'Error: Carbon transaction message is too big!';
|
|
168
|
+
this.onMessage(message);
|
|
169
|
+
onErrorCallback(message);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this.onError = onErrorCallback;
|
|
173
|
+
const request = 'signCarbonTxAndBroadcast/' + txHex;
|
|
174
|
+
this.sendLinkRequest(request, (result) => {
|
|
175
|
+
if (result.success) {
|
|
176
|
+
this.onMessage('Carbon transaction signed');
|
|
177
|
+
callback(result);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
if (onErrorCallback) {
|
|
181
|
+
onErrorCallback(result.error || 'Carbon transaction signing failed');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
139
186
|
signTxSignature(tx, callback, onErrorCallback, signature = 'Ed25519') {
|
|
140
187
|
if (!this.socket) {
|
|
141
188
|
this.onMessage('not logged in');
|
|
@@ -459,5 +506,9 @@ class PhantasmaLink {
|
|
|
459
506
|
if (this.socket)
|
|
460
507
|
this.socket.close();
|
|
461
508
|
}
|
|
509
|
+
serializeCarbonTx(txMsg) {
|
|
510
|
+
const serialized = CarbonBlob_1.CarbonBlob.Serialize(txMsg);
|
|
511
|
+
return (0, Hex_1.bytesToHex)(serialized);
|
|
512
|
+
}
|
|
462
513
|
}
|
|
463
514
|
exports.PhantasmaLink = PhantasmaLink;
|
|
@@ -65,7 +65,7 @@ export declare class PhantasmaAPI {
|
|
|
65
65
|
getOrganizationByName(name: string, extended?: boolean): Promise<Organization>;
|
|
66
66
|
getOrganizations(extended?: boolean): Promise<Organization[]>;
|
|
67
67
|
getLeaderboard(name: string): Promise<Leaderboard>;
|
|
68
|
-
getTokens(extended?: boolean): Promise<Token[]>;
|
|
68
|
+
getTokens(ownerAddress: string | undefined | null, extended?: boolean): Promise<Token[]>;
|
|
69
69
|
getToken(symbol: string, extended?: boolean): Promise<Token>;
|
|
70
70
|
getTokenData(symbol: string, IDtext: string): Promise<TokenData>;
|
|
71
71
|
getTokenBalance(account: string, tokenSymbol: string, chainInput: string): Promise<Balance>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phantasma.d.ts","sourceRoot":"","sources":["../../../src/core/rpc/phantasma.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"phantasma.d.ts","sourceRoot":"","sources":["../../../src/core/rpc/phantasma.ts"],"names":[],"mappings":"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"}
|
|
@@ -261,8 +261,8 @@ class PhantasmaAPI {
|
|
|
261
261
|
return (await this.JSONRPC('getLeaderboard', params));
|
|
262
262
|
}
|
|
263
263
|
//Returns an array of tokens deployed in Phantasma.
|
|
264
|
-
async getTokens(extended = true) {
|
|
265
|
-
let params = [extended];
|
|
264
|
+
async getTokens(ownerAddress, extended = true) {
|
|
265
|
+
let params = [ownerAddress, extended];
|
|
266
266
|
return (await this.JSONRPC('getTokens', params));
|
|
267
267
|
}
|
|
268
268
|
//Returns info about a specific token deployed in Phantasma.
|
|
@@ -34,6 +34,7 @@ export declare class Address implements ISerializable {
|
|
|
34
34
|
compareTo(other: Address): number;
|
|
35
35
|
equals(other: any): boolean;
|
|
36
36
|
toString(): string;
|
|
37
|
+
GetPublicKey(): Uint8Array;
|
|
37
38
|
ToByteArray(): Uint8Array;
|
|
38
39
|
SerializeData(writer: PBinaryWriter): void;
|
|
39
40
|
UnserializeData(reader: PBinaryReader): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../../src/core/types/Address.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI5D,oBAAY,WAAW;IACrB,OAAO,IAAI;IACX,IAAI,IAAI;IACR,MAAM,IAAI;IACV,OAAO,IAAI;CACZ;AAED,qBAAa,OAAQ,YAAW,aAAa;IAC3C,gBAAuB,QAAQ,EAAE,MAAM,CAAU;IACjD,gBAAuB,aAAa,EAAE,MAAM,CAAM;IAClD,gBAAuB,qBAAqB,EAAE,MAAM,CAAM;IAE1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAyC;IACrE,gBAAuB,IAAI,EAAE,OAAO,CAAsC;IAE1E,OAAO,CAAC,MAAM,CAAa;IAO3B,IAAW,IAAI,IAAI,WAAW,CAQ7B;IAED,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAUD,IAAW,MAAM,IAAI,OAAO,CAY3B;IAED,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAiC;IAE/D,IAAW,IAAI,IAAI,MAAM,CA8BxB;IAED,OAAO;WAYO,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO;WAK9C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WA+C5B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WASrC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;WAIrC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;WAiB/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;WAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;WAgBpC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAOpC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAWjC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAQ3B,QAAQ,IAAI,MAAM;IAuBlB,WAAW,IAAI,UAAU;IAIhC,aAAa,CAAC,MAAM,EAAE,aAAa;IAInC,eAAe,CAAC,MAAM,EAAE,aAAa;CAItC"}
|
|
1
|
+
{"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../../src/core/types/Address.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI5D,oBAAY,WAAW;IACrB,OAAO,IAAI;IACX,IAAI,IAAI;IACR,MAAM,IAAI;IACV,OAAO,IAAI;CACZ;AAED,qBAAa,OAAQ,YAAW,aAAa;IAC3C,gBAAuB,QAAQ,EAAE,MAAM,CAAU;IACjD,gBAAuB,aAAa,EAAE,MAAM,CAAM;IAClD,gBAAuB,qBAAqB,EAAE,MAAM,CAAM;IAE1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAyC;IACrE,gBAAuB,IAAI,EAAE,OAAO,CAAsC;IAE1E,OAAO,CAAC,MAAM,CAAa;IAO3B,IAAW,IAAI,IAAI,WAAW,CAQ7B;IAED,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAUD,IAAW,MAAM,IAAI,OAAO,CAY3B;IAED,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAiC;IAE/D,IAAW,IAAI,IAAI,MAAM,CA8BxB;IAED,OAAO;WAYO,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO;WAK9C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WA+C5B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WASrC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;WAIrC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;WAiB/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;WAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;WAgBpC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAOpC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAWjC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAQ3B,QAAQ,IAAI,MAAM;IAuBlB,YAAY,IAAI,UAAU;IAQ1B,WAAW,IAAI,UAAU;IAIhC,aAAa,CAAC,MAAM,EAAE,aAAa;IAInC,eAAe,CAAC,MAAM,EAAE,aAAa;CAItC"}
|
|
@@ -231,6 +231,12 @@ class Address {
|
|
|
231
231
|
}
|
|
232
232
|
return this._text;
|
|
233
233
|
}
|
|
234
|
+
GetPublicKey() {
|
|
235
|
+
if (!this._bytes || this._bytes.length !== Address.LengthInBytes) {
|
|
236
|
+
throw new Error('invalid address byte length');
|
|
237
|
+
}
|
|
238
|
+
return this._bytes.slice(2, 34);
|
|
239
|
+
}
|
|
234
240
|
ToByteArray() {
|
|
235
241
|
return this._bytes;
|
|
236
242
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/Carbon/Blockchain/Extensions/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./TxMsgSigner"), exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TokenSchemas } from '../TokenSchemas';
|
|
2
2
|
export declare class NftRomBuilder {
|
|
3
|
-
static
|
|
3
|
+
static buildAndSerialize(phantasmaNftId: bigint, name: string, description: string, imageURL: string, infoURL: string, royalties: number, rom: Uint8Array, tokenSchemas?: TokenSchemas): Uint8Array;
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=NftRomBuilder.d.ts.map
|
|
@@ -6,10 +6,10 @@ const Vm_1 = require("../../Vm");
|
|
|
6
6
|
const StandardMeta_1 = require("../StandardMeta");
|
|
7
7
|
const TokenSchemasBuilder_1 = require("./TokenSchemasBuilder");
|
|
8
8
|
class NftRomBuilder {
|
|
9
|
-
static
|
|
10
|
-
tokenSchemas = tokenSchemas || TokenSchemasBuilder_1.TokenSchemasBuilder.
|
|
9
|
+
static buildAndSerialize(phantasmaNftId, name, description, imageURL, infoURL, royalties, rom, tokenSchemas) {
|
|
10
|
+
tokenSchemas = tokenSchemas || TokenSchemasBuilder_1.TokenSchemasBuilder.prepareStandardTokenSchemas();
|
|
11
11
|
const wRom = new CarbonSerialization_1.CarbonBinaryWriter();
|
|
12
|
-
|
|
12
|
+
const vmDynamicStruct = new Vm_1.VmDynamicStruct();
|
|
13
13
|
vmDynamicStruct.fields = [
|
|
14
14
|
Vm_1.VmNamedDynamicVariable.from(StandardMeta_1.StandardMeta.id, Vm_1.VmType.Int256, phantasmaNftId),
|
|
15
15
|
Vm_1.VmNamedDynamicVariable.from('name', Vm_1.VmType.String, name),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Bytes32 } from '../../../Bytes32';
|
|
2
2
|
import { SeriesInfo } from '../SeriesInfo';
|
|
3
3
|
export declare class SeriesInfoBuilder {
|
|
4
|
-
static
|
|
4
|
+
static build(phantasmaSeriesId: bigint, maxMint: number, maxSupply: number, ownerPublicKey: Bytes32, sharedRom: Uint8Array, metadata?: Uint8Array): SeriesInfo;
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=SeriesInfoBuilder.d.ts.map
|
|
@@ -5,9 +5,9 @@ const Vm_1 = require("../../Vm");
|
|
|
5
5
|
const SeriesInfo_1 = require("../SeriesInfo");
|
|
6
6
|
const TokenSeriesMetadataBuilder_1 = require("./TokenSeriesMetadataBuilder");
|
|
7
7
|
class SeriesInfoBuilder {
|
|
8
|
-
static
|
|
8
|
+
static build(phantasmaSeriesId, maxMint, maxSupply, ownerPublicKey, sharedRom, metadata) {
|
|
9
9
|
metadata =
|
|
10
|
-
metadata || TokenSeriesMetadataBuilder_1.TokenSeriesMetadataBuilder.
|
|
10
|
+
metadata || TokenSeriesMetadataBuilder_1.TokenSeriesMetadataBuilder.buildAndSerialize(phantasmaSeriesId, sharedRom, null);
|
|
11
11
|
return new SeriesInfo_1.SeriesInfo({
|
|
12
12
|
maxMint: maxMint,
|
|
13
13
|
maxSupply: maxSupply,
|
|
@@ -3,5 +3,14 @@ import { IntX } from '../../../IntX';
|
|
|
3
3
|
import { TokenInfo } from '../TokenInfo';
|
|
4
4
|
export declare class TokenInfoBuilder {
|
|
5
5
|
static build(symbol: string, maxSupply: IntX, isNFT: boolean, decimals: number, creatorPublicKey: Bytes32, metadata?: Uint8Array, tokenSchemas?: Uint8Array): TokenInfo;
|
|
6
|
+
static maxSymbolLength: number;
|
|
7
|
+
/**
|
|
8
|
+
* Mirrors carbon::CheckIsValidSymbol from contracts/token.cpp.
|
|
9
|
+
* Returns true when valid, or false when the symbol must be rejected.
|
|
10
|
+
*/
|
|
11
|
+
static checkIsValidSymbol(symbol: string): {
|
|
12
|
+
ok: boolean;
|
|
13
|
+
error: string | null;
|
|
14
|
+
};
|
|
6
15
|
}
|
|
7
16
|
//# sourceMappingURL=TokenInfoBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenInfoBuilder.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/types/Carbon/Blockchain/Modules/Builders/TokenInfoBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,KAAK,CACV,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,OAAO,EACzB,QAAQ,CAAC,EAAE,UAAU,EACrB,YAAY,CAAC,EAAE,UAAU,GACxB,SAAS;
|
|
1
|
+
{"version":3,"file":"TokenInfoBuilder.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/types/Carbon/Blockchain/Modules/Builders/TokenInfoBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,KAAK,CACV,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,OAAO,EACzB,QAAQ,CAAC,EAAE,UAAU,EACrB,YAAY,CAAC,EAAE,UAAU,GACxB,SAAS;IA8BZ,MAAM,CAAC,eAAe,EAAE,MAAM,CAAO;IACrC;;;MAGE;IACF,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC;CAkB/E"}
|
|
@@ -7,15 +7,51 @@ const TokenInfo_1 = require("../TokenInfo");
|
|
|
7
7
|
const TokenSchemasBuilder_1 = require("./TokenSchemasBuilder");
|
|
8
8
|
class TokenInfoBuilder {
|
|
9
9
|
static build(symbol, maxSupply, isNFT, decimals, creatorPublicKey, metadata, tokenSchemas) {
|
|
10
|
+
const { ok, error } = this.checkIsValidSymbol(symbol);
|
|
11
|
+
if (!ok) {
|
|
12
|
+
throw Error(error ?? "Unknown error");
|
|
13
|
+
}
|
|
10
14
|
const tokenInfo = new TokenInfo_1.TokenInfo();
|
|
11
15
|
tokenInfo.maxSupply = maxSupply;
|
|
12
|
-
tokenInfo.flags =
|
|
16
|
+
tokenInfo.flags = 0; // Small fungible
|
|
17
|
+
if (isNFT) {
|
|
18
|
+
if (!maxSupply.is8ByteSafe()) {
|
|
19
|
+
throw Error("NFT maximum supply must fit into Int64");
|
|
20
|
+
}
|
|
21
|
+
tokenInfo.flags = CarbonTokenFlags_1.CarbonTokenFlags.NonFungible;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
if (!maxSupply.is8ByteSafe()) {
|
|
25
|
+
tokenInfo.flags = CarbonTokenFlags_1.CarbonTokenFlags.BigFungible;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
13
28
|
tokenInfo.decimals = decimals;
|
|
14
29
|
tokenInfo.owner = creatorPublicKey;
|
|
15
30
|
tokenInfo.symbol = new SmallString_1.SmallString(symbol);
|
|
16
31
|
tokenInfo.metadata = metadata;
|
|
17
|
-
tokenInfo.tokenSchemas = tokenSchemas || TokenSchemasBuilder_1.TokenSchemasBuilder.
|
|
32
|
+
tokenInfo.tokenSchemas = tokenSchemas || TokenSchemasBuilder_1.TokenSchemasBuilder.buildAndSerialize();
|
|
18
33
|
return tokenInfo;
|
|
19
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Mirrors carbon::CheckIsValidSymbol from contracts/token.cpp.
|
|
37
|
+
* Returns true when valid, or false when the symbol must be rejected.
|
|
38
|
+
*/
|
|
39
|
+
static checkIsValidSymbol(symbol) {
|
|
40
|
+
if (!symbol || symbol.length === 0) {
|
|
41
|
+
return { ok: false, error: "Symbol validation error: Empty string is invalid" };
|
|
42
|
+
}
|
|
43
|
+
if (symbol.length > this.maxSymbolLength) {
|
|
44
|
+
return { ok: false, error: "Symbol validation error: Too long" };
|
|
45
|
+
}
|
|
46
|
+
for (let i = 0; i < symbol.length; i++) {
|
|
47
|
+
const code = symbol.charCodeAt(i);
|
|
48
|
+
const isUppercaseAsciiLetter = code >= 0x41 && code <= 0x5a; // 'A'..'Z'
|
|
49
|
+
if (!isUppercaseAsciiLetter) {
|
|
50
|
+
return { ok: false, error: "Symbol validation error: Anything outside A–Z is forbidden (digits, accents, etc.)" };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { ok: true, error: null };
|
|
54
|
+
}
|
|
20
55
|
}
|
|
21
56
|
exports.TokenInfoBuilder = TokenInfoBuilder;
|
|
57
|
+
TokenInfoBuilder.maxSymbolLength = 255;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenMetadataBuilder.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"TokenMetadataBuilder.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU;CA2BtE"}
|
|
@@ -5,10 +5,14 @@ const CarbonSerialization_1 = require("../../../../CarbonSerialization");
|
|
|
5
5
|
const Vm_1 = require("../../Vm");
|
|
6
6
|
class TokenMetadataBuilder {
|
|
7
7
|
static buildAndSerialize(fields) {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const requiredFields = ['name', 'icon', 'url', 'description'];
|
|
9
|
+
if (!fields || Object.keys(fields).length < requiredFields.length) {
|
|
10
|
+
throw new Error('Token metadata is mandatory');
|
|
11
|
+
}
|
|
12
|
+
const missing = requiredFields.filter(field => typeof fields[field] !== 'string' || fields[field].trim() === '');
|
|
13
|
+
if (missing.length > 0) {
|
|
14
|
+
throw new Error(`Token metadata is missing required fields: ${missing.join(', ')}`);
|
|
10
15
|
}
|
|
11
|
-
fields = fields ?? {};
|
|
12
16
|
const metadataFields = [];
|
|
13
17
|
for (const [key, value] of Object.entries(fields)) {
|
|
14
18
|
metadataFields.push(Vm_1.VmNamedDynamicVariable.from(key, Vm_1.VmType.String, value));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TokenSchemas } from '../TokenSchemas';
|
|
2
2
|
export declare class TokenSchemasBuilder {
|
|
3
|
-
static
|
|
4
|
-
static
|
|
5
|
-
static
|
|
3
|
+
static prepareStandardTokenSchemas(): TokenSchemas;
|
|
4
|
+
static buildAndSerialize(tokenSchemas?: TokenSchemas): Uint8Array;
|
|
5
|
+
static buildAndSerializeHex(tokenSchemas?: TokenSchemas): string;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=TokenSchemasBuilder.d.ts.map
|
|
@@ -9,7 +9,7 @@ const VmType_1 = require("../../Vm/VmType");
|
|
|
9
9
|
const StandardMeta_1 = require("../StandardMeta");
|
|
10
10
|
const TokenSchemas_1 = require("../TokenSchemas");
|
|
11
11
|
class TokenSchemasBuilder {
|
|
12
|
-
static
|
|
12
|
+
static prepareStandardTokenSchemas() {
|
|
13
13
|
// Serie metadata schema
|
|
14
14
|
const seriesSchema = new VmStructSchema_1.VmStructSchema();
|
|
15
15
|
seriesSchema.fields = [];
|
|
@@ -38,15 +38,15 @@ class TokenSchemasBuilder {
|
|
|
38
38
|
tokenSchemas.ram = ramSchema;
|
|
39
39
|
return tokenSchemas;
|
|
40
40
|
}
|
|
41
|
-
static
|
|
42
|
-
tokenSchemas = tokenSchemas || this.
|
|
41
|
+
static buildAndSerialize(tokenSchemas) {
|
|
42
|
+
tokenSchemas = tokenSchemas || this.prepareStandardTokenSchemas();
|
|
43
43
|
const schemaBuf = new CarbonSerialization_1.CarbonBinaryWriter();
|
|
44
44
|
tokenSchemas.write(schemaBuf);
|
|
45
45
|
return schemaBuf.toUint8Array();
|
|
46
46
|
}
|
|
47
|
-
static
|
|
48
|
-
tokenSchemas = tokenSchemas || this.
|
|
49
|
-
return (0, utils_1.bytesToHex)(this.
|
|
47
|
+
static buildAndSerializeHex(tokenSchemas) {
|
|
48
|
+
tokenSchemas = tokenSchemas || this.prepareStandardTokenSchemas();
|
|
49
|
+
return (0, utils_1.bytesToHex)(this.buildAndSerialize(tokenSchemas));
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
exports.TokenSchemasBuilder = TokenSchemasBuilder;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TokenSchemas } from '../TokenSchemas';
|
|
2
2
|
export declare class TokenSeriesMetadataBuilder {
|
|
3
|
-
static
|
|
3
|
+
static buildAndSerialize(newPhantasmaSeriesId: bigint, sharedRom: Uint8Array, tokenSchemas?: TokenSchemas): Uint8Array;
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=TokenSeriesMetadataBuilder.d.ts.map
|
|
@@ -6,8 +6,8 @@ const Vm_1 = require("../../Vm");
|
|
|
6
6
|
const StandardMeta_1 = require("../StandardMeta");
|
|
7
7
|
const TokenSchemasBuilder_1 = require("./TokenSchemasBuilder");
|
|
8
8
|
class TokenSeriesMetadataBuilder {
|
|
9
|
-
static
|
|
10
|
-
tokenSchemas = tokenSchemas || TokenSchemasBuilder_1.TokenSchemasBuilder.
|
|
9
|
+
static buildAndSerialize(newPhantasmaSeriesId, sharedRom, tokenSchemas) {
|
|
10
|
+
tokenSchemas = tokenSchemas || TokenSchemasBuilder_1.TokenSchemasBuilder.prepareStandardTokenSchemas();
|
|
11
11
|
const wMetadata = new CarbonSerialization_1.CarbonBinaryWriter();
|
|
12
12
|
let vmDynamicStruct = new Vm_1.VmDynamicStruct();
|
|
13
13
|
vmDynamicStruct.fields = [
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenHelper.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/Carbon/Blockchain/Modules/TokenHelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,WAAW;IACtB,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;CAWzE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TokenHelper = void 0;
|
|
4
|
+
const CarbonSerialization_1 = require("../../../CarbonSerialization");
|
|
5
|
+
const Bytes32_1 = require("../../Bytes32");
|
|
6
|
+
class TokenHelper {
|
|
7
|
+
static getNftAddress(carbonTokenId, instanceId) {
|
|
8
|
+
const w = new CarbonSerialization_1.CarbonBinaryWriter();
|
|
9
|
+
w.write(new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]) // Carbon NFT ID prefix
|
|
10
|
+
);
|
|
11
|
+
w.write8u(carbonTokenId);
|
|
12
|
+
w.write8u(instanceId);
|
|
13
|
+
return new Bytes32_1.Bytes32(w.toUint8Array());
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.TokenHelper = TokenHelper;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
export * from "./Builders";
|
|
1
2
|
export * from "./SeriesInfo";
|
|
2
3
|
export * from "./StandardMeta";
|
|
3
4
|
export * from "./TokenContract_Methods";
|
|
5
|
+
export * from "./TokenHelper";
|
|
4
6
|
export * from "./TokenInfo";
|
|
5
7
|
export * from "./TokenSchemas";
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/Carbon/Blockchain/Modules/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,yBAAyB,CAAA;AACvC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/Carbon/Blockchain/Modules/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
|
|
@@ -14,8 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Builders"), exports);
|
|
17
18
|
__exportStar(require("./SeriesInfo"), exports);
|
|
18
19
|
__exportStar(require("./StandardMeta"), exports);
|
|
19
20
|
__exportStar(require("./TokenContract_Methods"), exports);
|
|
21
|
+
__exportStar(require("./TokenHelper"), exports);
|
|
20
22
|
__exportStar(require("./TokenInfo"), exports);
|
|
21
23
|
__exportStar(require("./TokenSchemas"), exports);
|
|
@@ -6,5 +6,6 @@ export declare class MintNonFungibleTxHelper {
|
|
|
6
6
|
static buildTx(carbonTokenId: bigint, carbonSeriesId: number, senderPublicKey: Bytes32, receiverPublicKey: Bytes32, rom: Uint8Array, ram: Uint8Array, feeOptions?: MintNftFeeOptions, maxData?: bigint, expiry?: bigint): TxMsg;
|
|
7
7
|
static buildTxAndSign(tokenId: bigint, seriesId: number, signer: PhantasmaKeys, receiverPublicKey: Bytes32, rom: Uint8Array, ram: Uint8Array, feeOptions?: MintNftFeeOptions, maxData?: bigint, expiry?: bigint): Uint8Array;
|
|
8
8
|
static buildTxAndSignHex(tokenId: bigint, seriesId: number, signer: PhantasmaKeys, receiverPublicKey: Bytes32, rom: Uint8Array, ram: Uint8Array | null | undefined, feeOptions?: MintNftFeeOptions, maxData?: bigint, expiry?: bigint): string;
|
|
9
|
+
static parseResult(carbonTokenId: bigint, resultHex: string): Bytes32[];
|
|
9
10
|
}
|
|
10
11
|
//# sourceMappingURL=MintNonFungibleTxHelper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MintNonFungibleTxHelper.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/Carbon/Blockchain/TxHelpers/MintNonFungibleTxHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MintNonFungibleTxHelper.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/Carbon/Blockchain/TxHelpers/MintNonFungibleTxHelper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAKxC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,qBAAa,uBAAuB;IAElC,MAAM,CAAC,OAAO,CACZ,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,OAAO,EACxB,iBAAiB,EAAE,OAAO,EAC1B,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,EACf,UAAU,CAAC,EAAE,iBAAiB,EAC9B,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,KAAK;IAyBR,MAAM,CAAC,cAAc,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EACrB,iBAAiB,EAAE,OAAO,EAC1B,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,EACf,UAAU,CAAC,EAAE,iBAAiB,EAC9B,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,UAAU;IAiBb,MAAM,CAAC,iBAAiB,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EACrB,iBAAiB,EAAE,OAAO,EAC1B,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EAClC,UAAU,CAAC,EAAE,iBAAiB,EAC9B,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM;IAeT,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;CAexE"}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MintNonFungibleTxHelper = void 0;
|
|
4
4
|
const utils_1 = require("../../../../utils");
|
|
5
|
+
const CarbonSerialization_1 = require("../../../CarbonSerialization");
|
|
5
6
|
const Bytes32_1 = require("../../Bytes32");
|
|
6
7
|
const SmallString_1 = require("../../SmallString");
|
|
7
8
|
const TxTypes_1 = require("../../TxTypes");
|
|
8
9
|
const TxMsgSigner_1 = require("../Extensions/TxMsgSigner");
|
|
10
|
+
const TokenHelper_1 = require("../Modules/TokenHelper");
|
|
9
11
|
const TxMsg_1 = require("../TxMsg");
|
|
10
12
|
const TxMsgMintNonFungible_1 = require("../TxMsgMintNonFungible");
|
|
11
13
|
const FeeOptions_1 = require("./FeeOptions");
|
|
@@ -21,7 +23,7 @@ class MintNonFungibleTxHelper {
|
|
|
21
23
|
msg.maxData = maxData;
|
|
22
24
|
msg.gasFrom = senderPublicKey;
|
|
23
25
|
msg.payload = SmallString_1.SmallString.empty;
|
|
24
|
-
|
|
26
|
+
const mint = new TxMsgMintNonFungible_1.TxMsgMintNonFungible();
|
|
25
27
|
mint.tokenId = carbonTokenId;
|
|
26
28
|
mint.seriesId = carbonSeriesId;
|
|
27
29
|
mint.to = receiverPublicKey;
|
|
@@ -41,5 +43,16 @@ class MintNonFungibleTxHelper {
|
|
|
41
43
|
const bytes = this.buildTxAndSign(tokenId, seriesId, signer, receiverPublicKey, rom, ram, feeOptions, maxData, expiry);
|
|
42
44
|
return (0, utils_1.bytesToHex)(bytes);
|
|
43
45
|
}
|
|
46
|
+
static parseResult(carbonTokenId, resultHex) {
|
|
47
|
+
const result = [];
|
|
48
|
+
const r = new CarbonSerialization_1.CarbonBinaryReader((0, utils_1.hexToBytes)(resultHex));
|
|
49
|
+
const count = r.read4u();
|
|
50
|
+
for (let i = 0; i < count; i++) {
|
|
51
|
+
const instanceId = r.read8u();
|
|
52
|
+
const carbonNftId = TokenHelper_1.TokenHelper.getNftAddress(carbonTokenId, instanceId);
|
|
53
|
+
result.push(carbonNftId);
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
44
57
|
}
|
|
45
58
|
exports.MintNonFungibleTxHelper = MintNonFungibleTxHelper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/types/Carbon/Blockchain/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/types/Carbon/Blockchain/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC"}
|
|
@@ -14,6 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Extensions"), exports);
|
|
18
|
+
__exportStar(require("./Modules"), exports);
|
|
19
|
+
__exportStar(require("./TxHelpers"), exports);
|
|
20
|
+
__exportStar(require("./Vm"), exports);
|
|
17
21
|
__exportStar(require("./CarbonTokenFlags"), exports);
|
|
18
22
|
__exportStar(require("./ModuleId"), exports);
|
|
19
23
|
__exportStar(require("./SignedTxMsg"), exports);
|
|
@@ -8,6 +8,7 @@ export declare class IntX implements ICarbonBlob {
|
|
|
8
8
|
static fromI64(v: number | bigint): IntX;
|
|
9
9
|
toBigInt(): bigint;
|
|
10
10
|
toString(): string;
|
|
11
|
+
is8ByteSafe(): boolean;
|
|
11
12
|
write(w: CarbonBinaryWriter): void;
|
|
12
13
|
read(r: CarbonBinaryReader): void;
|
|
13
14
|
static read(r: CarbonBinaryReader): IntX;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntX.d.ts","sourceRoot":"","sources":["../../../../src/core/types/Carbon/IntX.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,IAAK,YAAW,WAAW;IACtC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAS;IAGtB,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAOlC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOxC,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,MAAM;IAKlB,KAAK,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAwBlC,IAAI,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI;IA4CjC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI;CAKzC"}
|
|
1
|
+
{"version":3,"file":"IntX.d.ts","sourceRoot":"","sources":["../../../../src/core/types/Carbon/IntX.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,IAAK,YAAW,WAAW;IACtC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAS;IAGtB,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAOlC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOxC,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,MAAM;IAKlB,WAAW,IAAI,OAAO;IAQtB,KAAK,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAwBlC,IAAI,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI;IA4CjC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI;CAKzC"}
|
|
@@ -27,6 +27,13 @@ class IntX {
|
|
|
27
27
|
toString() {
|
|
28
28
|
return this.toBigInt().toString();
|
|
29
29
|
}
|
|
30
|
+
// Returns true when the current value fits into a signed 64-bit integer without overflow.
|
|
31
|
+
is8ByteSafe() {
|
|
32
|
+
const value = this.toBigInt();
|
|
33
|
+
const minI64 = -(1n << 63n);
|
|
34
|
+
const maxI64 = (1n << 63n) - 1n;
|
|
35
|
+
return value >= minI64 && value <= maxI64;
|
|
36
|
+
}
|
|
30
37
|
// Serialization (must match C# IntX.Write)
|
|
31
38
|
write(w) {
|
|
32
39
|
if (this.isBig) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/types/Carbon/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/types/Carbon/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
|
@@ -19,6 +19,7 @@ __exportStar(require("./Bytes16"), exports);
|
|
|
19
19
|
__exportStar(require("./Bytes32"), exports);
|
|
20
20
|
__exportStar(require("./Bytes64"), exports);
|
|
21
21
|
__exportStar(require("./CarbonBlob"), exports);
|
|
22
|
+
__exportStar(require("./IntX"), exports);
|
|
22
23
|
__exportStar(require("./SmallString"), exports);
|
|
23
24
|
__exportStar(require("./TxTypes"), exports);
|
|
24
25
|
__exportStar(require("./Witness"), exports);
|