@mainsail/crypto-transaction-evm-call 0.0.1-evm.2 → 0.0.1-evm.21
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/distribution/builder.d.ts.map +1 -1
- package/distribution/builder.js +9 -27
- package/distribution/builder.js.map +1 -1
- package/distribution/handlers/evm-call.d.ts +1 -7
- package/distribution/handlers/evm-call.d.ts.map +1 -1
- package/distribution/handlers/evm-call.js +22 -53
- package/distribution/handlers/evm-call.js.map +1 -1
- package/distribution/index.d.ts.map +1 -1
- package/distribution/index.js +1 -10
- package/distribution/index.js.map +1 -1
- package/distribution/versions/1.d.ts +0 -7
- package/distribution/versions/1.d.ts.map +1 -1
- package/distribution/versions/1.js +7 -87
- package/distribution/versions/1.js.map +1 -1
- package/package.json +16 -15
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../source/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../source/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGlE,qBACa,cAAe,SAAQ,kBAAkB,CAAC,cAAc,CAAC;IAE9D,aAAa;IAUb,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAMxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAMpC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;IASnE,SAAS,CAAC,QAAQ,IAAI,cAAc;CAGpC"}
|
package/distribution/builder.js
CHANGED
@@ -8,47 +8,29 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
9
9
|
};
|
10
10
|
import { injectable, postConstruct } from "@mainsail/container";
|
11
|
-
import { Exceptions } from "@mainsail/contracts";
|
12
11
|
import { TransactionBuilder } from "@mainsail/crypto-transaction";
|
13
12
|
import { BigNumber } from "@mainsail/utils";
|
14
|
-
import { EvmCallTransaction } from "./versions/1.js";
|
15
13
|
let EvmCallBuilder = class EvmCallBuilder extends TransactionBuilder {
|
16
14
|
postConstruct() {
|
17
15
|
this.initializeData();
|
18
|
-
this.data.
|
19
|
-
this.data.
|
20
|
-
this.data.
|
21
|
-
this.data.
|
22
|
-
this.data.
|
23
|
-
evmCall: {
|
24
|
-
gasLimit: 1_000_000,
|
25
|
-
payload: "",
|
26
|
-
},
|
27
|
-
};
|
16
|
+
this.data.value = BigNumber.ZERO;
|
17
|
+
this.data.from = "";
|
18
|
+
this.data.gas = 1_000_000;
|
19
|
+
this.data.gasPrice = 5 * 1e9;
|
20
|
+
this.data.data = "";
|
28
21
|
}
|
29
22
|
payload(payload) {
|
30
|
-
|
31
|
-
this.data.asset.evmCall.payload = payload.startsWith("0x") ? payload : `0x${payload}`;
|
32
|
-
}
|
23
|
+
this.data.data = payload.startsWith("0x") ? payload : `0x${payload}`;
|
33
24
|
return this;
|
34
25
|
}
|
35
26
|
gasLimit(gasLimit) {
|
36
|
-
|
37
|
-
this.data.asset.evmCall.gasLimit = gasLimit;
|
38
|
-
}
|
27
|
+
this.data.gas = gasLimit;
|
39
28
|
return this;
|
40
29
|
}
|
41
30
|
async getStruct() {
|
42
|
-
if (!this.data.asset || !this.data.asset.evmCall || !this.data.asset.evmCall.payload) {
|
43
|
-
throw new Exceptions.EvmCallIncompleteAssetError();
|
44
|
-
}
|
45
|
-
if (!this.data.recipientId) {
|
46
|
-
throw new Exceptions.EvmCallMissingRecipientError();
|
47
|
-
}
|
48
31
|
const struct = await super.getStruct();
|
49
|
-
struct.
|
50
|
-
struct.
|
51
|
-
struct.asset = this.data.asset;
|
32
|
+
struct.value = this.data.value;
|
33
|
+
struct.to = this.data.to;
|
52
34
|
return struct;
|
53
35
|
}
|
54
36
|
instance() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../source/builder.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../source/builder.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGrC,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,kBAAkC;IAE9D,aAAa;QACnB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAEM,OAAO,CAAC,OAAe;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAErE,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,QAAQ,CAAC,QAAgB;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QAEzB,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,SAAS;QACrB,MAAM,MAAM,GAAqC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QAEzE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAEzB,OAAO,MAAM,CAAC;IACf,CAAC;IAES,QAAQ;QACjB,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAA;AAlCO;IADN,aAAa,EAAE;;;;mDASf;AAVW,cAAc;IAD1B,UAAU,EAAE;GACA,cAAc,CAoC1B"}
|
@@ -4,16 +4,10 @@ import { Handlers } from "@mainsail/transactions";
|
|
4
4
|
export declare class EvmCallTransactionHandler extends Handlers.TransactionHandler {
|
5
5
|
#private;
|
6
6
|
private readonly events;
|
7
|
-
private readonly gasFeeCalculator;
|
8
7
|
private readonly state;
|
9
8
|
dependencies(): ReadonlyArray<Handlers.TransactionHandlerConstructor>;
|
10
9
|
getConstructor(): TransactionConstructor;
|
11
10
|
isActivated(): Promise<boolean>;
|
12
|
-
|
13
|
-
throwIfCannotEnterPool(context: Contracts.Transactions.TransactionHandlerContext, transaction: Contracts.Crypto.Transaction): Promise<void>;
|
14
|
-
applyToSender(context: Contracts.Transactions.TransactionHandlerContext, transaction: Contracts.Crypto.Transaction): Promise<Contracts.Transactions.TransactionApplyResult>;
|
15
|
-
applyToRecipient(context: Contracts.Transactions.TransactionHandlerContext, transaction: Contracts.Crypto.Transaction): Promise<Contracts.Transactions.TransactionApplyResult>;
|
16
|
-
protected verifyTransactionFee(context: Contracts.Transactions.TransactionHandlerContext, transaction: Contracts.Crypto.Transaction, sender: Contracts.State.Wallet): void;
|
17
|
-
protected applyFeeToSender(transaction: Contracts.Crypto.Transaction, sender: Contracts.State.Wallet): void;
|
11
|
+
apply(context: Contracts.Transactions.TransactionHandlerContext, transaction: Contracts.Crypto.Transaction): Promise<Contracts.Evm.TransactionReceipt>;
|
18
12
|
}
|
19
13
|
//# sourceMappingURL=evm-call.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"evm-call.d.ts","sourceRoot":"","sources":["../../source/handlers/evm-call.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,
|
1
|
+
{"version":3,"file":"evm-call.d.ts","sourceRoot":"","sources":["../../source/handlers/evm-call.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAKlD,qBACa,yBAA0B,SAAQ,QAAQ,CAAC,kBAAkB;;IAEzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAG3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAExC,YAAY,IAAI,aAAa,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAIrE,cAAc,IAAI,sBAAsB;IAIlC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,KAAK,CACjB,OAAO,EAAE,SAAS,CAAC,YAAY,CAAC,yBAAyB,EACzD,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,GACvC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;CA2C5C"}
|
@@ -14,9 +14,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
14
14
|
};
|
15
15
|
var _EvmCallTransactionHandler_instances, _EvmCallTransactionHandler_emit;
|
16
16
|
import { inject, injectable } from "@mainsail/container";
|
17
|
-
import { Contracts, Events,
|
18
|
-
import { Utils } from "@mainsail/kernel";
|
17
|
+
import { Contracts, Events, Identifiers } from "@mainsail/contracts";
|
19
18
|
import { Handlers } from "@mainsail/transactions";
|
19
|
+
import { assert } from "@mainsail/utils";
|
20
20
|
import { EvmCallTransaction } from "../versions/index.js";
|
21
21
|
let EvmCallTransactionHandler = class EvmCallTransactionHandler extends Handlers.TransactionHandler {
|
22
22
|
constructor() {
|
@@ -32,64 +32,37 @@ let EvmCallTransactionHandler = class EvmCallTransactionHandler extends Handlers
|
|
32
32
|
async isActivated() {
|
33
33
|
return true;
|
34
34
|
}
|
35
|
-
async
|
36
|
-
|
37
|
-
}
|
38
|
-
async throwIfCannotEnterPool(context, transaction) { }
|
39
|
-
async applyToSender(context, transaction) {
|
40
|
-
await super.applyToSender(context, transaction);
|
41
|
-
// Taken from receipt in applyToRecipient
|
42
|
-
return { gasUsed: 0 };
|
43
|
-
}
|
44
|
-
async applyToRecipient(context, transaction) {
|
45
|
-
Utils.assert.defined(transaction.data.asset?.evmCall);
|
46
|
-
Utils.assert.defined(transaction.id);
|
47
|
-
const { evmCall } = transaction.data.asset;
|
35
|
+
async apply(context, transaction) {
|
36
|
+
assert.string(transaction.hash);
|
48
37
|
const { evmSpec } = this.configuration.getMilestone();
|
49
|
-
const
|
38
|
+
const { from, senderLegacyAddress } = transaction.data;
|
50
39
|
try {
|
51
40
|
const { instance, blockContext } = context.evm;
|
52
41
|
const { receipt } = await instance.process({
|
53
42
|
blockContext,
|
54
|
-
|
55
|
-
|
56
|
-
gasLimit: BigInt(
|
57
|
-
|
58
|
-
|
43
|
+
data: Buffer.from(transaction.data.data, "hex"),
|
44
|
+
from,
|
45
|
+
gasLimit: BigInt(transaction.data.gas),
|
46
|
+
gasPrice: BigInt(transaction.data.gasPrice),
|
47
|
+
index: transaction.data.transactionIndex,
|
48
|
+
legacyAddress: senderLegacyAddress,
|
49
|
+
nonce: transaction.data.nonce.toBigInt(),
|
59
50
|
specId: evmSpec,
|
60
|
-
|
51
|
+
to: transaction.data.to,
|
52
|
+
txHash: transaction.hash,
|
53
|
+
value: transaction.data.value.toBigInt(),
|
61
54
|
});
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
sender.setBalance(newBalance);
|
69
|
-
if (instance.mode() === Contracts.Evm.EvmMode.Persistent && !this.state.isBootstrap()) {
|
70
|
-
this.logger.debug(`executed EVM call (success=${receipt.success}, gasUsed=${receipt.gasUsed} paidNativeFee=${Utils.formatCurrency(this.configuration, feeConsumed)} deployed=${receipt.deployedContractAddress})`);
|
71
|
-
void __classPrivateFieldGet(this, _EvmCallTransactionHandler_instances, "m", _EvmCallTransactionHandler_emit).call(this, Events.EvmEvent.TransactionReceipt, {
|
72
|
-
receipt,
|
73
|
-
sender: sender.getAddress(),
|
74
|
-
transactionId: transaction.id,
|
75
|
-
});
|
76
|
-
}
|
77
|
-
return { gasUsed: Number(receipt.gasUsed), receipt };
|
55
|
+
void __classPrivateFieldGet(this, _EvmCallTransactionHandler_instances, "m", _EvmCallTransactionHandler_emit).call(this, Events.EvmEvent.TransactionReceipt, {
|
56
|
+
receipt,
|
57
|
+
sender: from,
|
58
|
+
transactionId: transaction.hash,
|
59
|
+
});
|
60
|
+
return receipt;
|
78
61
|
}
|
79
62
|
catch (error) {
|
80
|
-
|
81
|
-
}
|
82
|
-
}
|
83
|
-
verifyTransactionFee(context, transaction, sender) {
|
84
|
-
Utils.assert.defined(transaction.data.asset?.evmCall);
|
85
|
-
const maxFee = this.gasFeeCalculator.calculate(transaction);
|
86
|
-
if (sender.getBalance().minus(maxFee).isNegative() && this.configuration.getHeight() > 0) {
|
87
|
-
throw new Exceptions.InsufficientBalanceError();
|
63
|
+
throw new Error(`invalid EVM call: ${error.message}`);
|
88
64
|
}
|
89
65
|
}
|
90
|
-
applyFeeToSender(transaction, sender) {
|
91
|
-
// Fee is taken after EVM execution to take the actual consumed gas into account
|
92
|
-
}
|
93
66
|
};
|
94
67
|
_EvmCallTransactionHandler_instances = new WeakSet();
|
95
68
|
_EvmCallTransactionHandler_emit = async function _EvmCallTransactionHandler_emit(event, data) {
|
@@ -102,10 +75,6 @@ __decorate([
|
|
102
75
|
inject(Identifiers.Services.EventDispatcher.Service),
|
103
76
|
__metadata("design:type", Object)
|
104
77
|
], EvmCallTransactionHandler.prototype, "events", void 0);
|
105
|
-
__decorate([
|
106
|
-
inject(Identifiers.Evm.Gas.FeeCalculator),
|
107
|
-
__metadata("design:type", Object)
|
108
|
-
], EvmCallTransactionHandler.prototype, "gasFeeCalculator", void 0);
|
109
78
|
__decorate([
|
110
79
|
inject(Identifiers.State.State),
|
111
80
|
__metadata("design:type", Object)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"evm-call.js","sourceRoot":"","sources":["../../source/handlers/evm-call.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"evm-call.js","sourceRoot":"","sources":["../../source/handlers/evm-call.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGnD,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,QAAQ,CAAC,kBAAkB;IAAnE;;;IAiEP,CAAC;IA1DO,YAAY;QAClB,OAAO,EAAE,CAAC;IACX,CAAC;IAEM,cAAc;QACpB,OAAO,kBAAkB,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,WAAW;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,KAAK,CACjB,OAAyD,EACzD,WAAyC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAEtD,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;QAEvD,IAAI,CAAC;YACJ,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;YAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gBAC1C,YAAY;gBACZ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC/C,IAAI;gBACJ,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;gBACtC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3C,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,gBAAgB;gBACxC,aAAa,EAAE,mBAAmB;gBAClC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACxC,MAAM,EAAE,OAAO;gBACf,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE;gBACvB,MAAM,EAAE,WAAW,CAAC,IAAI;gBACxB,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;aACxC,CAAC,CAAC;YAEH,KAAK,uBAAA,IAAI,6EAAM,MAAV,IAAI,EAAO,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE;gBACnD,OAAO;gBACP,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,WAAW,CAAC,IAAI;aAC/B,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;CASD,CAAA;;kCAPA,KAAK,0CAAU,KAAiC,EAAE,IAAQ;IACzD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9B,OAAO;IACR,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AA9DgB;IADhB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC;;yDACM;AAG1C;IADhB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;;wDACe;AALnC,yBAAyB;IADrC,UAAU,EAAE;GACA,yBAAyB,CAiErC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AAEpC,qBACa,eAAgB,SAAQ,SAAS,CAAC,eAAe;;IAChD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,gBAAgB,IAAI,OAAO;CAalC"}
|
package/distribution/index.js
CHANGED
@@ -9,11 +9,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
11
11
|
};
|
12
|
-
var _ServiceProvider_instances,
|
12
|
+
var _ServiceProvider_instances, _ServiceProvider_registerType, _ServiceProvider_registerHandler;
|
13
13
|
import { injectable } from "@mainsail/container";
|
14
14
|
import { Identifiers } from "@mainsail/contracts";
|
15
15
|
import { Providers } from "@mainsail/kernel";
|
16
|
-
import { BigNumber } from "@mainsail/utils";
|
17
16
|
import { EvmCallTransactionHandler } from "./handlers/index.js";
|
18
17
|
import { EvmCallTransaction } from "./versions/1.js";
|
19
18
|
export * from "./builder.js";
|
@@ -24,7 +23,6 @@ let ServiceProvider = class ServiceProvider extends Providers.ServiceProvider {
|
|
24
23
|
_ServiceProvider_instances.add(this);
|
25
24
|
}
|
26
25
|
async register() {
|
27
|
-
__classPrivateFieldGet(this, _ServiceProvider_instances, "m", _ServiceProvider_registerFees).call(this);
|
28
26
|
__classPrivateFieldGet(this, _ServiceProvider_instances, "m", _ServiceProvider_registerType).call(this);
|
29
27
|
__classPrivateFieldGet(this, _ServiceProvider_instances, "m", _ServiceProvider_registerHandler).call(this);
|
30
28
|
}
|
@@ -33,13 +31,6 @@ let ServiceProvider = class ServiceProvider extends Providers.ServiceProvider {
|
|
33
31
|
}
|
34
32
|
};
|
35
33
|
_ServiceProvider_instances = new WeakSet();
|
36
|
-
_ServiceProvider_registerFees = function _ServiceProvider_registerFees() {
|
37
|
-
// TODO
|
38
|
-
this.app.get(Identifiers.Fee.Registry).set(EvmCallTransaction.key, {
|
39
|
-
managed: BigNumber.make("100"),
|
40
|
-
static: BigNumber.make("2500000000"),
|
41
|
-
}[this.app.get(Identifiers.Fee.Type)]);
|
42
|
-
};
|
43
34
|
_ServiceProvider_registerType = function _ServiceProvider_registerType() {
|
44
35
|
this.app
|
45
36
|
.get(Identifiers.Cryptography.Transaction.Registry)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AAG7B,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,SAAS,CAAC,eAAe;IAAvD;;;IAoBP,CAAC;IAnBO,KAAK,CAAC,QAAQ;QACpB,uBAAA,IAAI,iEAAc,MAAlB,IAAI,CAAgB,CAAC;QAErB,uBAAA,IAAI,oEAAiB,MAArB,IAAI,CAAmB,CAAC;IACzB,CAAC;IAEM,gBAAgB;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;CAWD,CAAA;;;IARC,IAAI,CAAC,GAAG;SACN,GAAG,CAAsB,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC;SACvE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;AAC/C,CAAC;;IAGA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC;AACxF,CAAC;AAnBW,eAAe;IAD3B,UAAU,EAAE;GACA,eAAe,CAoB3B"}
|
@@ -1,15 +1,8 @@
|
|
1
1
|
import { Contracts } from "@mainsail/contracts";
|
2
2
|
import { Transaction } from "@mainsail/crypto-transaction";
|
3
|
-
import { ByteBuffer } from "@mainsail/utils";
|
4
3
|
export declare class EvmCallTransaction extends Transaction {
|
5
|
-
private readonly addressSerializer;
|
6
|
-
private readonly addressSize;
|
7
|
-
static typeGroup: number;
|
8
4
|
static type: number;
|
9
5
|
static key: string;
|
10
6
|
static getSchema(): Contracts.Crypto.TransactionSchema;
|
11
|
-
assetSize(): number;
|
12
|
-
serialize(options?: Contracts.Crypto.SerializeOptions): Promise<ByteBuffer>;
|
13
|
-
deserialize(buf: ByteBuffer): Promise<void>;
|
14
7
|
}
|
15
8
|
//# sourceMappingURL=1.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"1.d.ts","sourceRoot":"","sources":["../../source/versions/1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,
|
1
|
+
{"version":3,"file":"1.d.ts","sourceRoot":"","sources":["../../source/versions/1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAgB,WAAW,EAAyB,MAAM,8BAA8B,CAAC;AAEhG,qBACa,kBAAmB,SAAQ,WAAW;IAClD,OAAc,IAAI,EAAE,MAAM,CAAK;IAC/B,OAAc,GAAG,SAAa;WAEhB,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,iBAAiB;CAY7D"}
|
@@ -4,104 +4,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
6
|
};
|
7
|
-
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
9
|
-
};
|
10
|
-
import { inject, injectable } from "@mainsail/container";
|
11
|
-
import { Contracts, Identifiers } from "@mainsail/contracts";
|
7
|
+
import { injectable } from "@mainsail/container";
|
12
8
|
import { extendSchema, Transaction, transactionBaseSchema } from "@mainsail/crypto-transaction";
|
13
|
-
import { Utils } from "@mainsail/kernel";
|
14
|
-
import { ByteBuffer } from "@mainsail/utils";
|
15
9
|
let EvmCallTransaction = class EvmCallTransaction extends Transaction {
|
16
10
|
static getSchema() {
|
17
11
|
return extendSchema(transactionBaseSchema, {
|
18
12
|
$id: "evmCall",
|
19
13
|
properties: {
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
properties: {
|
25
|
-
gasLimit: {
|
26
|
-
transactionGasLimit: {},
|
27
|
-
},
|
28
|
-
payload: {
|
29
|
-
bytecode: {},
|
30
|
-
},
|
31
|
-
},
|
32
|
-
required: ["gasLimit", "payload"],
|
33
|
-
type: "object",
|
34
|
-
unevaluatedProperties: false,
|
35
|
-
},
|
36
|
-
},
|
37
|
-
required: ["evmCall"],
|
38
|
-
type: "object",
|
39
|
-
unevaluatedProperties: false,
|
40
|
-
},
|
41
|
-
fee: { bignumber: { maximum: 1000, minimum: 5 } },
|
42
|
-
recipientId: { $ref: "address" },
|
43
|
-
type: { transactionType: Contracts.Crypto.TransactionType.EvmCall },
|
14
|
+
data: { bytecode: {} },
|
15
|
+
gasPrice: { transactionGasPrice: {} },
|
16
|
+
to: { $ref: "address" },
|
17
|
+
value: { bignumber: { maximum: undefined, minimum: 0 } },
|
44
18
|
},
|
45
|
-
required: ["
|
19
|
+
required: ["gasPrice", "gas"],
|
46
20
|
});
|
47
21
|
}
|
48
|
-
assetSize() {
|
49
|
-
const { addressSize, data } = this;
|
50
|
-
Utils.assert.defined(data.asset?.evmCall);
|
51
|
-
const { evmCall } = data.asset;
|
52
|
-
return (1 + // recipient marker
|
53
|
-
(data.recipientId ? addressSize : 0) + // recipient
|
54
|
-
4 + // gas limit
|
55
|
-
4 + // payload length
|
56
|
-
Buffer.byteLength(evmCall.payload, "hex"));
|
57
|
-
}
|
58
|
-
async serialize(options) {
|
59
|
-
const { addressSize, addressFactory, addressSerializer, data } = this;
|
60
|
-
Utils.assert.defined(data.asset);
|
61
|
-
Utils.assert.defined(data.asset.evmCall?.gasLimit);
|
62
|
-
Utils.assert.defined(data.asset.evmCall?.payload);
|
63
|
-
const payloadBytes = Buffer.from(data.asset.evmCall.payload, "hex");
|
64
|
-
const buff = ByteBuffer.fromSize(1 + (data.recipientId ? addressSize : 0) + 4 + 4 + payloadBytes.byteLength);
|
65
|
-
if (data.recipientId) {
|
66
|
-
buff.writeUint8(1);
|
67
|
-
addressSerializer.serialize(buff, await addressFactory.toBuffer(data.recipientId));
|
68
|
-
}
|
69
|
-
else {
|
70
|
-
buff.writeUint8(0);
|
71
|
-
}
|
72
|
-
buff.writeUint32(data.asset.evmCall.gasLimit);
|
73
|
-
buff.writeUint32(payloadBytes.byteLength);
|
74
|
-
buff.writeBytes(payloadBytes);
|
75
|
-
return buff;
|
76
|
-
}
|
77
|
-
async deserialize(buf) {
|
78
|
-
const { data, addressFactory, addressSerializer } = this;
|
79
|
-
const recipientMarker = buf.readUint8();
|
80
|
-
if (recipientMarker === 1) {
|
81
|
-
data.recipientId = await addressFactory.fromBuffer(addressSerializer.deserialize(buf));
|
82
|
-
}
|
83
|
-
const gasLimit = buf.readUint32();
|
84
|
-
const payloadLength = buf.readUint32();
|
85
|
-
const payload = buf.readBytes(payloadLength);
|
86
|
-
data.asset = {
|
87
|
-
evmCall: {
|
88
|
-
gasLimit,
|
89
|
-
payload: payload.toString("hex"),
|
90
|
-
},
|
91
|
-
};
|
92
|
-
}
|
93
22
|
};
|
94
|
-
EvmCallTransaction.
|
95
|
-
EvmCallTransaction.type = Contracts.Crypto.TransactionType.EvmCall;
|
23
|
+
EvmCallTransaction.type = 0;
|
96
24
|
EvmCallTransaction.key = "evmCall";
|
97
|
-
__decorate([
|
98
|
-
inject(Identifiers.Cryptography.Identity.Address.Serializer),
|
99
|
-
__metadata("design:type", Object)
|
100
|
-
], EvmCallTransaction.prototype, "addressSerializer", void 0);
|
101
|
-
__decorate([
|
102
|
-
inject(Identifiers.Cryptography.Identity.Address.Size),
|
103
|
-
__metadata("design:type", Number)
|
104
|
-
], EvmCallTransaction.prototype, "addressSize", void 0);
|
105
25
|
EvmCallTransaction = __decorate([
|
106
26
|
injectable()
|
107
27
|
], EvmCallTransaction);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"1.js","sourceRoot":"","sources":["../../source/versions/1.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"1.js","sourceRoot":"","sources":["../../source/versions/1.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGzF,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,WAAW;IAI3C,MAAM,CAAC,SAAS;QACtB,OAAO,YAAY,CAAC,qBAAqB,EAAE;YAC1C,GAAG,EAAE,SAAS;YACd,UAAU,EAAE;gBACX,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACtB,QAAQ,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE;gBACrC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBACvB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;aACxD;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC;SAC7B,CAAC,CAAC;IACJ,CAAC;;AAda,uBAAI,GAAW,CAAC,AAAZ,CAAa;AACjB,sBAAG,GAAG,SAAS,AAAZ,CAAa;AAFlB,kBAAkB;IAD9B,UAAU,EAAE;GACA,kBAAkB,CAgB9B"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@mainsail/crypto-transaction-evm-call",
|
3
|
-
"version": "0.0.1-evm.
|
3
|
+
"version": "0.0.1-evm.21",
|
4
4
|
"description": "EVM transaction for the Mainsail blockchain",
|
5
5
|
"license": "GPL-3.0-only",
|
6
6
|
"contributors": [],
|
@@ -11,21 +11,22 @@
|
|
11
11
|
"/distribution"
|
12
12
|
],
|
13
13
|
"dependencies": {
|
14
|
-
"@mainsail/container": "0.0.1-evm.
|
15
|
-
"@mainsail/contracts": "0.0.1-evm.
|
16
|
-
"@mainsail/
|
17
|
-
"@mainsail/
|
18
|
-
"@mainsail/
|
19
|
-
"@mainsail/utils": "0.0.1-evm.
|
14
|
+
"@mainsail/container": "0.0.1-evm.21",
|
15
|
+
"@mainsail/contracts": "0.0.1-evm.21",
|
16
|
+
"@mainsail/transactions": "0.0.1-evm.21",
|
17
|
+
"@mainsail/crypto-transaction": "0.0.1-evm.21",
|
18
|
+
"@mainsail/kernel": "0.0.1-evm.21",
|
19
|
+
"@mainsail/utils": "0.0.1-evm.21"
|
20
20
|
},
|
21
21
|
"devDependencies": {
|
22
|
-
"ethers": "
|
23
|
-
"uvu": "
|
24
|
-
"@mainsail/crypto-address-
|
25
|
-
"@mainsail/crypto-
|
26
|
-
"@mainsail/crypto-validation": "0.0.1-evm.
|
27
|
-
"@mainsail/
|
28
|
-
"@mainsail/
|
22
|
+
"ethers": "6.13.5",
|
23
|
+
"uvu": "0.5.6",
|
24
|
+
"@mainsail/crypto-address-base58": "0.0.1-evm.21",
|
25
|
+
"@mainsail/crypto-key-pair-ecdsa": "0.0.1-evm.21",
|
26
|
+
"@mainsail/crypto-validation": "0.0.1-evm.21",
|
27
|
+
"@mainsail/validation": "0.0.1-evm.21",
|
28
|
+
"@mainsail/crypto-address-keccak256": "0.0.1-evm.21",
|
29
|
+
"@mainsail/crypto-config": "0.0.1-evm.21"
|
29
30
|
},
|
30
31
|
"engines": {
|
31
32
|
"node": ">=20.x"
|
@@ -36,7 +37,7 @@
|
|
36
37
|
"clean": "del distribution",
|
37
38
|
"release": "pnpm publish --access public",
|
38
39
|
"test": "pnpm run uvu source .test.ts",
|
39
|
-
"test:coverage": "c8 pnpm run test",
|
40
|
+
"test:coverage": "c8 -r=text -r=lcov --all pnpm run test",
|
40
41
|
"test:coverage:html": "c8 -r html --all pnpm run test",
|
41
42
|
"test:file": "pnpm run uvu source",
|
42
43
|
"uvu": "tsx --tsconfig ../../tsconfig.test.json ./node_modules/uvu/bin.js"
|