Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add essentials section for Transactions #1961

Merged
merged 62 commits into from
Apr 15, 2024
Merged
Show file tree
Hide file tree
Changes from 55 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
ad3ba01
chore: changeset
danielbate Mar 27, 2024
14612db
docs: add documentation on transactions
danielbate Mar 27, 2024
fbbf1c9
Merge branch 'master' of https://github.com/FuelLabs/fuels-ts into db…
danielbate Mar 27, 2024
864d5b2
chore: fix spellcheck
danielbate Mar 27, 2024
8912c16
chore: fix changeset
danielbate Mar 27, 2024
6b1d5d1
chore: add vitest to docs snippets
danielbate Mar 27, 2024
d4f8e31
chore: remove redundant await
danielbate Mar 28, 2024
f0b9f08
docs: correct grammar
danielbate Mar 28, 2024
0038f1e
docs: update transactions index docs
danielbate Mar 28, 2024
af1857a
chore: improve wording
danielbate Mar 28, 2024
fe4c510
chore: add glossary link
danielbate Mar 28, 2024
14b3ca3
docs: improve tx param docs
danielbate Mar 28, 2024
86d582b
Merge branch 'master' into db/docs/transactions-contracts
danielbate Mar 28, 2024
0189edb
test: fix tx request test
danielbate Mar 28, 2024
072d6be
Merge branch 'master' into db/docs/transactions-contracts
danielbate Mar 28, 2024
187edc8
Merge branch 'master' of https://github.com/FuelLabs/fuels-ts into db…
danielbate Mar 29, 2024
9840a31
docs: fix outputs snippet
danielbate Mar 29, 2024
79ece0c
docs: add line breaks to snippets
danielbate Mar 29, 2024
268b6a8
Merge branch 'master' into db/docs/transactions-contracts
danielbate Mar 29, 2024
b4003cd
Merge branch 'master' into db/docs/transactions-contracts
danielbate Mar 29, 2024
7d02c6c
Merge branch 'master' into db/docs/transactions-contracts
danielbate Mar 29, 2024
006ec4d
Merge branch 'master' of https://github.com/FuelLabs/fuels-ts into db…
danielbate Apr 1, 2024
5fcb542
docs: update transactions index
danielbate Apr 1, 2024
ae65699
docs: add tx id warning
danielbate Apr 1, 2024
f8fd5de
docs: alter tx response test
danielbate Apr 1, 2024
f622966
docs: add note around tx signing
danielbate Apr 1, 2024
ddb2f9a
docs: reference multiple signers cookbok
danielbate Apr 1, 2024
e6491d6
chore: rebuild
danielbate Apr 1, 2024
ff3ed38
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 1, 2024
48f09d1
Merge branch 'master' into db/docs/transactions-contracts
arboleya Apr 2, 2024
2b15a3d
docs: improve intro
danielbate Apr 3, 2024
af01cb7
docs: improve transaction index
danielbate Apr 3, 2024
f734c6b
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 3, 2024
7b20bec
docs: improve transactions index page
danielbate Apr 3, 2024
f615593
chore: fix spell check
danielbate Apr 3, 2024
c2419e5
chore: fix docs link
danielbate Apr 3, 2024
eff0237
test: fix transactions test
danielbate Apr 3, 2024
8d0919a
test: fix transactions test
danielbate Apr 3, 2024
807262b
chore: linting
danielbate Apr 3, 2024
7702632
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 3, 2024
6ff5f1a
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 3, 2024
f7259e7
Merge branch 'master' into db/docs/transactions-contracts
Dhaiwat10 Apr 4, 2024
42026e6
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 4, 2024
8546c99
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 4, 2024
bd6e553
Merge branch 'master' of https://github.com/FuelLabs/fuels-ts into db…
danielbate Apr 5, 2024
fd94e8f
docs: fix typo
danielbate Apr 5, 2024
1e64d97
docs: add more info for predicates
danielbate Apr 5, 2024
f6f17ff
chore: fix predicate link
danielbate Apr 5, 2024
6daff84
chore: add more contet to gas limit and max fee
danielbate Apr 5, 2024
aa07665
chore: add links between policies and parameters
danielbate Apr 5, 2024
a537f38
feat: correctly pass input data
danielbate Apr 5, 2024
3600c13
Merge branch 'master' into db/docs/transactions-contracts
petertonysmith94 Apr 8, 2024
fe9bef1
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 8, 2024
c1cfc80
Merge branch 'master' of https://github.com/FuelLabs/fuels-ts into db…
danielbate Apr 9, 2024
7a549e1
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 10, 2024
5465b60
chore: fix typo
danielbate Apr 10, 2024
307b036
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 10, 2024
a0b6530
Merge branch 'master' of https://github.com/FuelLabs/fuels-ts into db…
danielbate Apr 11, 2024
2087111
docs: add max fee description
danielbate Apr 11, 2024
ad621e9
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 12, 2024
d671797
Merge branch 'master' into db/docs/transactions-contracts
danielbate Apr 14, 2024
627f905
Merge branch 'master' into db/docs/transactions-contracts
petertonysmith94 Apr 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .changeset/late-books-juggle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
---

docs: add essentials section for Transactions
3 changes: 2 additions & 1 deletion apps/docs-snippets/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"@fuel-ts/errors": "workspace:*",
"@fuel-ts/utils": "workspace:*",
"ethers": "^6.7.1",
"fuels": "workspace:*"
"fuels": "workspace:*",
"vitest": "^1.1.3"
danielbate marked this conversation as resolved.
Show resolved Hide resolved
nedsalk marked this conversation as resolved.
Show resolved Hide resolved
},
"keywords": [],
"author": "",
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import type { Contract, Provider, TxParams } from 'fuels';
import { BN, PolicyType, ScriptTransactionRequest, bn } from 'fuels';
import { expectTypeOf } from 'vitest';

import {
DocSnippetProjectsEnum,
getDocsSnippetsForcProject,
} from '../../../test/fixtures/forc-projects';
import { createAndDeployContractFromProject } from '../../utils';

/**
* @group node
*/
describe(__filename, () => {
let contract: Contract;
let provider: Provider;
let gasPrice: BN;

const { binHexlified: scriptBytecode } = getDocsSnippetsForcProject(
DocSnippetProjectsEnum.SUM_SCRIPT
);

beforeAll(async () => {
contract = await createAndDeployContractFromProject(DocSnippetProjectsEnum.COUNTER);
provider = contract.provider;
gasPrice = provider.getGasConfig().minGasPrice;
});

it('matches tx param types', () => {
// #region transaction-parameters-1
// import { TxParams, bn };
danielbate marked this conversation as resolved.
Show resolved Hide resolved

const txParams: TxParams = {
gasPrice: bn(1), // BigNumberish or undefined
gasLimit: bn(1), // BigNumberish or undefined
maturity: 1, // number or undefined
maxFee: bn(1), // BigNumberish or undefined
witnessLimit: bn(1), // BigNumberish or undefined
variableOutputs: 1, // number or undefined
};
// #endregion transaction-parameters-1
danielbate marked this conversation as resolved.
Show resolved Hide resolved

expectTypeOf(txParams).toMatchTypeOf<TxParams>();
});

it('executes a script transaction request with txParams', () => {
// #region transaction-parameters-2
// #import { ScriptTransactionRequest };

// Instantiate the transaction request using a ScriptTransactionRequest
// We can set txParams in the request constructor
const transactionRequest = new ScriptTransactionRequest({
script: scriptBytecode,
gasLimit: 100,
gasPrice,
});
// #endregion transaction-parameters-2

expect(transactionRequest.gasLimit.toNumber()).toBe(100);
expect(transactionRequest.gasPrice.toNumber()).toBe(gasPrice.toNumber());
});

it('executes contract call with txParams', async () => {
// #region transaction-parameters-3
const { transactionResult } = await contract.functions
.increment_count(15)
.txParams({
gasLimit: 10_000,
variableOutputs: 1,
})
.call();
// #endregion transaction-parameters-3

const { transaction } = transactionResult;

const gasLimitPolicy = transaction.policies?.find(
(policy) => policy.type === PolicyType.GasPrice
);

expect(new BN(transaction.scriptGasLimit).toNumber()).toBe(10_000);
expect(new BN(gasLimitPolicy?.data).toNumber()).toBe(gasPrice.toNumber());
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import type { WalletUnlocked, TransactionResponse, Policy } from 'fuels';
import { BaseAssetId, ScriptTransactionRequest, bn, PolicyType } from 'fuels';

import {
DocSnippetProjectsEnum,
getDocsSnippetsForcProject,
} from '../../../test/fixtures/forc-projects';
import { getTestWallet } from '../../utils';

/**
* @group node
*/
describe('Transaction Policies', () => {
let wallet: WalletUnlocked;

const { abiContents: scriptAbi, binHexlified: scriptBytecode } = getDocsSnippetsForcProject(
DocSnippetProjectsEnum.SUM_SCRIPT
);

beforeAll(async () => {
wallet = await getTestWallet();
});

it('sets policies', () => {
// #region transaction-policies-1
// #import { ScriptTransactionRequest };

const transactionRequest = new ScriptTransactionRequest({
gasPrice: bn(1), // Sets the gas price policy
witnessLimit: bn(1), // Sets the witness limit policy
maturity: 1, // Sets the maturity policy
maxFee: bn(1), // Sets the max fee policy
});
// #endregion transaction-policies-1

const { policyTypes, policies } = ScriptTransactionRequest.getPolicyMeta(transactionRequest);

expect(policyTypes).toBe(15);
expect(policies?.[0].type).toBe(PolicyType.GasPrice);
expect(bn(policies?.[0].data).eq(transactionRequest.gasPrice)).toBeTruthy();
expect(policies?.[1].type).toBe(PolicyType.WitnessLimit);
expect(bn(policies?.[1].data).eq(bn(transactionRequest.witnessLimit))).toBeTruthy();
expect(policies?.[2].type).toBe(PolicyType.Maturity);
expect(policies?.[2]?.data).toBe(transactionRequest.maturity);
expect(policies?.[3].type).toBe(PolicyType.MaxFee);
expect(bn(policies?.[3].data).eq(bn(transactionRequest.maxFee))).toBeTruthy();
});

it('gets transaction response from tx id', async () => {
const scriptMainFunctionArguments = [1];
const resources = await wallet.getResourcesToSpend([{ amount: 1000, assetId: BaseAssetId }]);

// #region transaction-policies-2
// #import { ScriptTransactionRequest, TransactionResponse, Policy };

// Instantiate the transaction request with transaction parameters that would
// set the respective policies.
const transactionRequest = new ScriptTransactionRequest({
script: scriptBytecode,
gasLimit: bn(1_000),
maturity: 2,
gasPrice: bn(3),
witnessLimit: 900,
maxFee: bn(10_000),
});

// Set the script main function arguments
transactionRequest.setData(scriptAbi, scriptMainFunctionArguments);

// Fund the transaction
transactionRequest.addResources(resources);

// Submit the transaction and retrieve the transaction response
const tx: TransactionResponse = await wallet.sendTransaction(transactionRequest);
const response = await tx.waitForResult();

// Retrieve the policies from the transaction response. The policies property
// is undefined if the transaction had no policies applied.
const policies: Policy[] | undefined = response.transaction.policies;
// #endregion transaction-policies-2

if (!policies) {
throw new Error('No policies found');
}

expect(policies?.[0].type).toBe(PolicyType.GasPrice);
expect(bn(policies?.[0].data).eq(transactionRequest.gasPrice)).toBeTruthy();
expect(policies?.[1].type).toBe(PolicyType.WitnessLimit);
expect(bn(policies?.[1].data).eq(bn(transactionRequest.witnessLimit))).toBeTruthy();
expect(policies?.[2].type).toBe(PolicyType.Maturity);
expect(policies?.[2]?.data).toBe(transactionRequest.maturity);
expect(policies?.[3].type).toBe(PolicyType.MaxFee);
expect(bn(policies?.[3].data).eq(bn(transactionRequest.maxFee))).toBeTruthy();
});
});
Loading
Loading