Skip to content
Closed
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-core",
"version": "14.0.3",
"version": "14.0.4",
"description": "MultiversX SDK for JavaScript and TypeScript",
"author": "MultiversX",
"homepage": "https://multiversx.com",
Expand Down
2 changes: 1 addition & 1 deletion src/core/smartContractQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export class SmartContractQueryResponse {
let returnMessage = payload["returnMessage"] || payload["ReturnMessage"];

return new SmartContractQueryResponse({
returnDataParts: returnData?.map((item) => Buffer.from(item || "", "base64")),
returnDataParts: returnData?.map((item) => Buffer.from(item || "", "base64")) ?? [],
returnCode: returnCode,
returnMessage: returnMessage,
function: functionName,
Expand Down
7 changes: 4 additions & 3 deletions src/core/transactionOnNetwork.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,12 @@ export class TransactionOnNetwork {
const result = TransactionOnNetwork.fromHttpResponse(txHash, response);
result.smartContractResults =
response.smartContractResults?.map(
(result: Partial<SmartContractResult>) =>
(result: any) =>
new SmartContractResult({
...result,
receiver: result.receiver ? new Address(result.receiver) : undefined,
sender: result.sender ? new Address(result.sender) : undefined,
data: Buffer.from(result.data ?? "", "utf-8"),
raw: result,
}),
) ?? [];
Expand Down Expand Up @@ -142,11 +143,12 @@ export class TransactionOnNetwork {
const result = TransactionOnNetwork.fromHttpResponse(txHash, response);
result.smartContractResults =
response.results?.map(
(result: Partial<SmartContractResult>) =>
(result: any) =>
new SmartContractResult({
...result,
receiver: result.receiver ? new Address(result.receiver) : undefined,
sender: result.sender ? new Address(result.sender) : undefined,
data: Buffer.from(result.data ?? "", "base64"),
raw: result,
}),
) ?? [];
Expand All @@ -167,7 +169,6 @@ export class TransactionOnNetwork {
result.gasPrice = BigInt(response.gasPrice) || 0n;
result.gasLimit = BigInt(response.gasLimit) || 0n;
result.function = response.function || "";
result.data = Buffer.from(response.data || "", "base64");
result.version = response.version || 1;
result.options = response.options || 0;
result.data = Buffer.from(response.data || "", "base64");
Expand Down
16 changes: 15 additions & 1 deletion src/networkProviders/apiNetworkProvider.dev.net.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ describe("ApiNetworkProvider Tests", function () {
assert.isTrue(transaction.status.isCompleted());
});

it("should fetch smart contract invoking transaction", async () => {
it("should fetch smart contract invoking transaction with expected data", async () => {
const transaction = await apiProvider.getTransaction(
"6fe05e4ca01d42c96ae5182978a77fe49f26bcc14aac95ad4f19618173f86ddb",
);
Expand All @@ -175,6 +175,10 @@ describe("ApiNetworkProvider Tests", function () {
"issue@54455354546f6b656e@54455354@016345785d8a0000@06@63616e4368616e67654f776e6572@74727565@63616e55706772616465@74727565@63616e4164645370656369616c526f6c6573@74727565",
),
);
assert.deepEqual(
transaction.smartContractResults[0].data,
Buffer.from("ESDTSetBurnRoleForAll@544553542d666631353565"),
);
assert.equal(Buffer.from(transaction.logs.events[0].topics[0]).toString("hex"), "544553542d666631353565");
assert.equal(Buffer.from(transaction.logs.events[0].topics[1]).toString("hex"), "");
assert.equal(Buffer.from(transaction.logs.events[0].topics[2]).toString("hex"), "63616e4368616e67654f776e6572");
Expand Down Expand Up @@ -382,4 +386,14 @@ describe("ApiNetworkProvider Tests", function () {
const result = await apiProvider.queryContract(query);
assert.equal(result.returnDataParts.length, 1);
});

it("should query contract when undefined returnData", async () => {
const query = new SmartContractQuery({
contract: Address.newFromBech32("erd1qqqqqqqqqqqqqpgqf738mcf8f08kuwhn8dvtka5veyad2fqwu00sqnjgln"),
function: "getAllProposers",
arguments: [],
});
const result = await apiProvider.queryContract(query);
assert.equal(result.returnDataParts.length, 0);
});
});
16 changes: 15 additions & 1 deletion src/networkProviders/proxyNetworkProvider.dev.net.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ describe("ProxyNetworkProvider Tests", function () {
assert.isTrue(transaction.status.isCompleted());
});

it("should fetch smart contract invoking transaction", async () => {
it("should fetch smart contract invoking transaction with expected data", async () => {
const transaction = await proxy.getTransaction(
"6fe05e4ca01d42c96ae5182978a77fe49f26bcc14aac95ad4f19618173f86ddb",
);
Expand All @@ -181,6 +181,10 @@ describe("ProxyNetworkProvider Tests", function () {
"issue@54455354546f6b656e@54455354@016345785d8a0000@06@63616e4368616e67654f776e6572@74727565@63616e55706772616465@74727565@63616e4164645370656369616c526f6c6573@74727565",
),
);
assert.deepEqual(
transaction.smartContractResults[0].data,
Buffer.from("ESDTSetBurnRoleForAll@544553542d666631353565"),
);
assert.equal(Buffer.from(transaction.logs.events[0].topics[0]).toString("hex"), "544553542d666631353565");
assert.equal(Buffer.from(transaction.logs.events[0].topics[1]).toString("hex"), "");
assert.equal(Buffer.from(transaction.logs.events[0].topics[2]).toString("hex"), "63616e4368616e67654f776e6572");
Expand Down Expand Up @@ -388,4 +392,14 @@ describe("ProxyNetworkProvider Tests", function () {
const result = await proxy.queryContract(query);
assert.equal(result.returnDataParts.length, 1);
});

it("should query contract when undefined returnData", async () => {
const query = new SmartContractQuery({
contract: Address.newFromBech32("erd1qqqqqqqqqqqqqpgqf738mcf8f08kuwhn8dvtka5veyad2fqwu00sqnjgln"),
function: "getAllProposers",
arguments: [],
});
const result = await proxy.queryContract(query);
assert.equal(result.returnDataParts.length, 0);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ describe("test smart contract transactions outcome parser", () => {
const transactionOnNetwork = new TransactionOnNetwork({
nonce: 7n,
function: "getUltimateAnswer",
smartContractResults: [new SmartContractResult({ data: Buffer.from("@6f6b@2a") })],
smartContractResults: [new SmartContractResult({ data: Buffer.from("QDZmNmJAMmE=", "base64") })],
});

const parsed = parser.parseExecute({ transactionOnNetwork });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ export class SmartContractTransactionsOutcomeParser {
const eligibleResults: SmartContractResult[] = [];

for (const result of transactionOnNetwork.smartContractResults) {
const matchesCriteriaOnData = result.data.toString().startsWith(ARGUMENTS_SEPARATOR);
const matchesCriteriaOnData = Buffer.from(result.data).toString("utf-8").startsWith(ARGUMENTS_SEPARATOR);
const matchesCriteriaOnReceiver = result.receiver.toBech32() === transactionOnNetwork.sender.toBech32();
const matchesCriteriaOnPreviousHash = result;

Expand Down