Skip to content

Commit 089a568

Browse files
committed
V6.0.0
- Update dependencies. - Added Sui Network support. - Added Aptos Network support.
1 parent d0393f6 commit 089a568

File tree

221 files changed

+22628
-782
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

221 files changed

+22628
-782
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 6.0.0
2+
3+
- Update dependencies.
4+
- Added Sui Network support.
5+
- Added Aptos Network support.
6+
17
## 5.1.0
28

39
- Update dependencies.

README.md

Lines changed: 45 additions & 740 deletions
Large diffs are not rendered by default.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import 'package:on_chain/on_chain.dart';
2+
import 'provider_example.dart';
3+
4+
final AptosProvider aptosProvider =
5+
AptosProvider(AptosHttpService("https://api.testnet.aptoslabs.com/"));
6+
Future<AptosApiAccountData> getAccountInfo(AptosAddress address) async {
7+
final r =
8+
await aptosProvider.request(AptosRequestGetAccount(address: address));
9+
return r;
10+
}
11+
12+
Future<BigInt> getAccountSequence(AptosAddress address) async {
13+
final r =
14+
await aptosProvider.request(AptosRequestGetAccount(address: address));
15+
return r.sequenceNumber;
16+
}
17+
18+
Future<String> simulate(AptosSignedTransaction transaction) async {
19+
final r = await aptosProvider.request(AptosRequestSubmitTransaction(
20+
signedTransactionData: transaction.toBcs()));
21+
return r.hash;
22+
}
23+
24+
Future<int> getChainId() async {
25+
final r = await aptosProvider.request(AptosRequestGetLedgerInfo());
26+
return r.chainId;
27+
}
28+
29+
Future<BigInt> gasEstimate() async {
30+
final r = await aptosProvider.request(AptosRequestEstimateGasPrice());
31+
return BigInt.from(r.gasEstimate);
32+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import 'package:on_chain/on_chain.dart';
2+
import 'api_methods.dart';
3+
4+
void main() async {
5+
AptosEd25519Account getAccount() {
6+
return AptosEd25519Account(
7+
AptosED25519PrivateKey.fromBytes(List<int>.filled(32, 12)));
8+
}
9+
10+
final recipient1 = AptosAddress(
11+
"0x89dd43dcedf165f975202fae5f8aecf03013ebc14bb3c09a1431313b4ee52b02");
12+
final recipient2 = AptosAddress(
13+
"0xf9761c71494a2c4e3f989302f68ed03f83cd521dc1c22441fcc1aee4b324723d");
14+
final account = getAccount();
15+
final transactionPayload = AptosTransactionPayloadEntryFunction(
16+
entryFunction: AptosTransactionEntryFunction(
17+
moduleId:
18+
AptosModuleId(address: AptosAddress.one, name: "aptos_account"),
19+
functionName: 'batch_transfer',
20+
typeArgs: [],
21+
args: [
22+
MoveVector<AptosAddress>([recipient1, recipient2]),
23+
MoveVector<MoveU64>([MoveU64.aptos("0.0001"), MoveU64.aptos("0.0002")])
24+
]));
25+
final gasUnitPrice = await gasEstimate();
26+
final sequenceNumber = await getAccountSequence(account.toAddress());
27+
final chainId = await getChainId();
28+
final expire =
29+
DateTime.now().add(const Duration(minutes: 5)).millisecondsSinceEpoch ~/
30+
1000;
31+
final transaction = AptosRawTransaction(
32+
sender: account.toAddress(),
33+
sequenceNumber: sequenceNumber,
34+
transactionPayload: transactionPayload,
35+
maxGasAmount: BigInt.from(200000),
36+
gasUnitPrice: gasUnitPrice,
37+
expirationTimestampSecs: BigInt.from(expire),
38+
chainId: chainId);
39+
final authenticator = account.signWithAuth(transaction.signingSerialize());
40+
final signedTx = AptosSignedTransaction(
41+
rawTransaction: transaction,
42+
authenticator: AptosTransactionAuthenticatorEd25519(
43+
publicKey: authenticator.publicKey,
44+
signature: authenticator.signature));
45+
await simulate(signedTx);
46+
47+
/// https://explorer.aptoslabs.com/txn/0x392868c085edc7ee6e260996e235190d320d38b28eaa8a28e23a52f1362d66d5?network=testnet
48+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'package:blockchain_utils/utils/binary/utils.dart';
2+
import 'package:on_chain/on_chain.dart';
3+
import 'api_methods.dart';
4+
5+
void main() async {
6+
AptosSingleKeyAccount getAccount() {
7+
final account =
8+
AptosSecp256k1PrivateKey.fromBytes(List<int>.filled(32, 25));
9+
return AptosSingleKeyAccount(account);
10+
}
11+
12+
final sender = getAccount();
13+
const script =
14+
"0xa11ceb0b060000000601000402040403080a051209071b3608512000000001000302000102000200000402030001060c000105010800066f626a656374067369676e65720a616464726573735f6f660e436f6e7374727563746f725265660d6372656174655f6f626a6563740000000000000000000000000000000000000000000000000000000000000001000001050b00110011010102";
15+
final transactionPayload = AptosTransactionPayloadScript(
16+
script: AptosScript(
17+
byteCode: BytesUtils.fromHexString(script),
18+
typeArgs: [],
19+
arguments: []));
20+
final gasUnitPrice = await gasEstimate();
21+
final sequenceNumber = await getAccountSequence(sender.publicKey.toAddress());
22+
final chainId = await getChainId();
23+
final expire =
24+
DateTime.now().add(const Duration(minutes: 5)).millisecondsSinceEpoch ~/
25+
1000;
26+
final transaction = AptosRawTransaction(
27+
sender: sender.publicKey.toAddress(),
28+
sequenceNumber: sequenceNumber,
29+
transactionPayload: transactionPayload,
30+
maxGasAmount: BigInt.from(200000),
31+
gasUnitPrice: gasUnitPrice,
32+
expirationTimestampSecs: BigInt.from(expire),
33+
chainId: chainId);
34+
final authenticator = sender.signWithAuth(transaction.signingSerialize());
35+
final signedTx = AptosSignedTransaction(
36+
rawTransaction: transaction,
37+
authenticator: AptosTransactionAuthenticatorSignleSender(authenticator));
38+
await simulate(signedTx);
39+
40+
/// https://explorer.aptoslabs.com/txn/0x9fc9c8bc59b7897a549ac39562393924cf1da916c1f91ade52261c9239dcca3a/changes?network=testnet
41+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// ignore_for_file: unused_local_variable
2+
3+
import 'package:blockchain_utils/blockchain_utils.dart';
4+
import 'package:on_chain/on_chain.dart';
5+
6+
void main() {
7+
const passphrase = "MRTNETWORK";
8+
final mnemonic =
9+
Bip39MnemonicGenerator().fromWordsNumber(Bip39WordsNum.wordsNum24);
10+
final seed = Bip39SeedGenerator(mnemonic).generate(passphrase);
11+
final wallet = Bip44.fromSeed(seed, Bip44Coins.aptos);
12+
final defaultPath = wallet.deriveDefaultPath;
13+
final address = AptosAddress(defaultPath.publicKey.toAddress);
14+
final account = AptosEd25519Account(
15+
AptosED25519PrivateKey.fromBytes(defaultPath.privateKey.raw));
16+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import 'package:on_chain/on_chain.dart';
2+
import 'api_methods.dart';
3+
4+
void main() async {
5+
/// the token created in `publish_ft_token_module_example` example
6+
AptosEd25519Account getAccount() {
7+
final account = AptosED25519PrivateKey.fromBytes(List<int>.filled(32, 36));
8+
return AptosEd25519Account(account);
9+
}
10+
11+
final account = getAccount();
12+
13+
final transactionPayload = AptosTransactionPayloadEntryFunction(
14+
entryFunction: AptosTransactionEntryFunction(
15+
moduleId: AptosModuleId(address: account.toAddress(), name: "dog"),
16+
functionName: 'mint',
17+
args: [account.toAddress(), MoveU64(BigInt.from(100000))]));
18+
final gasUnitPrice = await gasEstimate();
19+
final sequenceNumber = await getAccountSequence(account.toAddress());
20+
final chainId = await getChainId();
21+
final expire =
22+
DateTime.now().add(const Duration(minutes: 5)).millisecondsSinceEpoch ~/
23+
1000;
24+
final transaction = AptosRawTransaction(
25+
sender: account.toAddress(),
26+
sequenceNumber: sequenceNumber,
27+
transactionPayload: transactionPayload,
28+
maxGasAmount: BigInt.from(200000),
29+
gasUnitPrice: gasUnitPrice,
30+
expirationTimestampSecs: BigInt.from(expire),
31+
chainId: chainId);
32+
final serializeSign = transaction.signingSerialize();
33+
final authenticator = account.signWithAuth(serializeSign);
34+
final signedTx = AptosSignedTransaction(
35+
rawTransaction: transaction,
36+
authenticator: AptosTransactionAuthenticatorEd25519(
37+
publicKey: authenticator.publicKey,
38+
signature: authenticator.signature));
39+
await simulate(signedTx);
40+
41+
/// https://explorer.aptoslabs.com/txn/0xf2e42c3bdff11f28c0e21884c9378cb20ac947880ca447d073c27b8cbc6a5a1b?network=testnet
42+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import 'package:blockchain_utils/utils/binary/utils.dart';
2+
import 'package:on_chain/on_chain.dart';
3+
import 'api_methods.dart';
4+
5+
void main() async {
6+
AptosSingleKeyAccount getRecipient() {
7+
final account = AptosED25519PrivateKey.fromBytes(List<int>.filled(32, 26));
8+
return AptosSingleKeyAccount(account);
9+
}
10+
11+
AptosSingleKeyAccount getAccount() {
12+
final account =
13+
AptosSecp256k1PrivateKey.fromBytes(List<int>.filled(32, 25));
14+
return AptosSingleKeyAccount(account);
15+
}
16+
17+
final sender = getAccount();
18+
final recipient = getRecipient();
19+
const String script =
20+
"0xa11ceb0b060000000701000602060a031017042706052d2d075a4b08a5012000000001000201030701000101040800020503040000060602010001070408010801060902010801050207030704060c060c0503010b000108010001060c010501090003060c0503010801010b0001090003060c0b000109000504636f696e066f626a656374067369676e6572064f626a6563740a4f626a656374436f72650a616464726573735f6f66087472616e7366657211616464726573735f746f5f6f626a6563740000000000000000000000000000000000000000000000000000000000000001010000010e0a010a0011000b0338000b0238010c040b000b040b011100380202";
21+
final AptosAddress objectAddress = AptosAddress(
22+
"0x25bee59257280e4361b733d2cf9f320a1a8e2e5a6e760a79875f9dfcab05a0b0");
23+
final transactionPayload = AptosTransactionPayloadScript(
24+
script:
25+
AptosScript(byteCode: BytesUtils.fromHexString(script), typeArgs: [
26+
AptosTypeTagStruct(AptosStructTag(
27+
address: AptosAddress("0x1"),
28+
moduleName: 'aptos_coin',
29+
name: 'AptosCoin'))
30+
], arguments: [
31+
objectAddress,
32+
MoveU64(BigInt.from(100))
33+
]));
34+
final gasUnitPrice = await gasEstimate();
35+
final sequenceNumber = await getAccountSequence(sender.publicKey.toAddress());
36+
final chainId = await getChainId();
37+
final expire =
38+
DateTime.now().add(const Duration(minutes: 5)).millisecondsSinceEpoch ~/
39+
1000;
40+
final transaction = AptosRawTransaction(
41+
sender: sender.publicKey.toAddress(),
42+
sequenceNumber: sequenceNumber,
43+
transactionPayload: transactionPayload,
44+
maxGasAmount: BigInt.from(200000),
45+
gasUnitPrice: gasUnitPrice,
46+
expirationTimestampSecs: BigInt.from(expire),
47+
chainId: chainId);
48+
final digest = transaction.signingSerialize(
49+
secondarySignerAddresses: [recipient.publicKey.toAddress()]);
50+
final authenticator = sender.signWithAuth(digest);
51+
final recipientAuthenticator = recipient.signWithAuth(digest);
52+
final txauthenticator = AptosTransactionAuthenticatorMultiAgent(
53+
sender: authenticator,
54+
secondarySigner: [recipientAuthenticator],
55+
secondarySignerAddressess: [recipient.publicKey.toAddress()]);
56+
final signedTx = AptosSignedTransaction(
57+
rawTransaction: transaction, authenticator: txauthenticator);
58+
await simulate(signedTx);
59+
60+
/// https://explorer.aptoslabs.com/txn/0xd23a797626830900976b198fcbce513ddd439ac9b3e8240630fdaee3a0feb42b?network=testnet
61+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import 'package:on_chain/on_chain.dart';
2+
import 'api_methods.dart';
3+
4+
void main() async {
5+
final module = await aptosProvider.request(AptosRequestGetAccountModule(
6+
address: AptosAddress("0x1"), moduleName: "aptos_governance"));
7+
final function = module.abi.findViewFunction("get_remaining_voting_power");
8+
final arguments = AptosFunctionEntryArgumentUtils.parseArguments(
9+
function: function,
10+
values: [
11+
"0xba08cec00a8cfa1deff6c9212dda8d198c8fa6ee1992f3ada76d645f99e3402b",
12+
0
13+
]);
14+
await aptosProvider.request(AptosRequestExecuteViewFunctionOfaModule.bcs(
15+
entry: AptosTransactionEntryFunction(
16+
moduleId: AptosModuleId(
17+
address: AptosAddress("0x1"),
18+
name: "aptos_governance"), // Governance module
19+
functionName: "get_remaining_voting_power", // Function to execute
20+
args: arguments)));
21+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import 'package:http/http.dart';
2+
import 'package:on_chain/on_chain.dart';
3+
4+
class AptosHttpService implements AptosServiceProvider {
5+
AptosHttpService(this.url,
6+
{Client? client, this.defaultTimeOut = const Duration(seconds: 30)})
7+
: client = client ?? Client();
8+
9+
final String url;
10+
final Client client;
11+
final Duration defaultTimeOut;
12+
@override
13+
Future<AptosServiceResponse<T>> doRequest<T>(AptosRequestDetails params,
14+
{Duration? timeout}) async {
15+
final url = params.toUri(this.url);
16+
final defaultTimeOut = timeout ?? this.defaultTimeOut;
17+
if (params.type.isPostRequest) {
18+
final response = await client
19+
.post(url, headers: params.headers, body: params.body())
20+
.timeout(defaultTimeOut);
21+
return params.parseResponse(response.bodyBytes, response.statusCode);
22+
}
23+
final response =
24+
await client.get(url, headers: params.headers).timeout(defaultTimeOut);
25+
return params.parseResponse(response.bodyBytes, response.statusCode);
26+
}
27+
}
28+
29+
void main() async {
30+
/// Provider examples
31+
32+
/// Initialize the AptosProvider with the Testnet HTTP service endpoint
33+
final AptosProvider provider =
34+
AptosProvider(AptosHttpService("https://api.testnet.aptoslabs.com/"));
35+
36+
/// Define an Aptos address to interact with
37+
final address = AptosAddress(
38+
"0x89dd43dcedf165f975202fae5f8aecf03013ebc14bb3c09a1431313b4ee52b02");
39+
40+
/// Request account details for the specified address
41+
await provider.request(AptosRequestGetAccount(address: address));
42+
43+
/// Fetch the transaction history for the specified address
44+
await provider.request(AptosRequestGetAccountTransactions(address: address));
45+
46+
/// Retrieve all recent transactions from the Aptos network
47+
await provider.request(AptosRequestGetTransactions());
48+
49+
/// Execute a view function from the 'aptos_governance' module to get remaining voting power
50+
await provider.request(AptosRequestExecuteViewFunctionOfaModule.bcs(
51+
entry: AptosTransactionEntryFunction(
52+
moduleId: AptosModuleId(
53+
address: AptosAddress("0x1"),
54+
name: "aptos_governance"), // Governance module
55+
functionName: "get_remaining_voting_power", // Function to execute
56+
args: [
57+
// Address to check voting power for
58+
AptosAddress(
59+
"0xba08cec00a8cfa1deff6c9212dda8d198c8fa6ee1992f3ada76d645f99e3402b"),
60+
MoveU64(BigInt.one) // Argument representing the proposal ID or context
61+
])));
62+
63+
final dynamicResult =
64+
await provider.requestDynamic(AptosRequestGetAccount(address: address));
65+
// ignore: unused_local_variable
66+
final authentication = dynamicResult["authentication_key"];
67+
68+
/// ...
69+
}

0 commit comments

Comments
 (0)