Skip to content

Instantly share code, notes, and snippets.

@ptisserand
Last active July 15, 2023 07:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ptisserand/c4f16bb1d076a187e3b402f8f2038314 to your computer and use it in GitHub Desktop.
Save ptisserand/c4f16bb1d076a187e3b402f8f2038314 to your computer and use it in GitHub Desktop.
Dart code generated from Cairo 1 contract
import 'package:starknet/starknet.dart';
import 'erc.sierra.g.dart';
void main() async {
Felt contractAddress = Felt.fromHexString(
"0x53813135446812b36f67e5b363813df086d88544ce17c742376082b8e997e29");
final account = account0;
final erc20 = Erc(account: account, address: contractAddress);
final name = await erc20.get_name();
print('Name: ${name.toSymbol()}');
final symbol = await erc20.get_symbol();
print('Symbol: ${symbol.toSymbol()}');
final supply = await erc20.get_total_supply();
print('Supply: $supply');
final decimals = await erc20.get_decimals();
print('Decimals: $decimals');
final balance = await erc20.balance_of(account.accountAddress);
print('Balance: $balance');
await erc20.transfer(
account1.accountAddress,
Uint256(
low: Felt.fromInt(10),
high: Felt.fromInt(0),
),
);
print(
'Balance account 0: ${(await erc20.balance_of(account.accountAddress))}',
);
print(
'Balance account 1: ${(await erc20.balance_of(account1.accountAddress))}',
);
}
// Generated code, do not modify. Run `build_runner build` to re-generate!
import 'package:starknet/starknet.dart';
class Erc {
Erc({
required account,
required address,
}) : _contract = Contract(
account: account,
address: address,
);
final Contract _contract;
Future<String> constructor(
Felt name_,
Felt symbol_,
Felt decimals_,
Uint256 initial_supply,
Felt recipient,
) async {
final List<Felt> params = [
...name_.toCallData(),
...symbol_.toCallData(),
...decimals_.toCallData(),
...initial_supply.toCallData(),
...recipient.toCallData(),
];
final trx = await _contract.execute(
'constructor',
params,
);
final trxHash = trx.when(
result: (result) => result.transaction_hash,
error: (error) => throw Exception,
);
return trxHash;
}
Future<Felt> get_name() async {
final List<Felt> params = [];
final res = await _contract.call(
'get_name',
params,
);
return Felt.fromCallData(res);
}
Future<Felt> get_symbol() async {
final List<Felt> params = [];
final res = await _contract.call(
'get_symbol',
params,
);
return Felt.fromCallData(res);
}
Future<Felt> get_decimals() async {
final List<Felt> params = [];
final res = await _contract.call(
'get_decimals',
params,
);
return Felt.fromCallData(res);
}
Future<Uint256> get_total_supply() async {
final List<Felt> params = [];
final res = await _contract.call(
'get_total_supply',
params,
);
return Uint256.fromCallData(res);
}
Future<Uint256> balance_of(Felt account) async {
final List<Felt> params = [...account.toCallData()];
final res = await _contract.call(
'balance_of',
params,
);
return Uint256.fromCallData(res);
}
Future<Uint256> allowance(
Felt owner,
Felt spender,
) async {
final List<Felt> params = [
...owner.toCallData(),
...spender.toCallData(),
];
final res = await _contract.call(
'allowance',
params,
);
return Uint256.fromCallData(res);
}
Future<String> transfer(
Felt recipient,
Uint256 amount,
) async {
final List<Felt> params = [
...recipient.toCallData(),
...amount.toCallData(),
];
final trx = await _contract.execute(
'transfer',
params,
);
final trxHash = trx.when(
result: (result) => result.transaction_hash,
error: (error) => throw Exception,
);
return trxHash;
}
Future<String> transfer_from(
Felt sender,
Felt recipient,
Uint256 amount,
) async {
final List<Felt> params = [
...sender.toCallData(),
...recipient.toCallData(),
...amount.toCallData(),
];
final trx = await _contract.execute(
'transfer_from',
params,
);
final trxHash = trx.when(
result: (result) => result.transaction_hash,
error: (error) => throw Exception,
);
return trxHash;
}
Future<String> approve(
Felt spender,
Uint256 amount,
) async {
final List<Felt> params = [
...spender.toCallData(),
...amount.toCallData(),
];
final trx = await _contract.execute(
'approve',
params,
);
final trxHash = trx.when(
result: (result) => result.transaction_hash,
error: (error) => throw Exception,
);
return trxHash;
}
Future<String> increase_allowance(
Felt spender,
Uint256 added_value,
) async {
final List<Felt> params = [
...spender.toCallData(),
...added_value.toCallData(),
];
final trx = await _contract.execute(
'increase_allowance',
params,
);
final trxHash = trx.when(
result: (result) => result.transaction_hash,
error: (error) => throw Exception,
);
return trxHash;
}
Future<String> decrease_allowance(
Felt spender,
Uint256 subtracted_value,
) async {
final List<Felt> params = [
...spender.toCallData(),
...subtracted_value.toCallData(),
];
final trx = await _contract.execute(
'decrease_allowance',
params,
);
final trxHash = trx.when(
result: (result) => result.transaction_hash,
error: (error) => throw Exception,
);
return trxHash;
}
}
[{"type":"function","name":"constructor","inputs":[{"name":"name_","type":"core::felt252"},{"name":"symbol_","type":"core::felt252"},{"name":"decimals_","type":"core::integer::u8"},{"name":"initial_supply","type":"core::integer::u256"},{"name":"recipient","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"get_name","inputs":[],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"get_symbol","inputs":[],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"get_decimals","inputs":[],"outputs":[{"type":"core::integer::u8"}],"state_mutability":"view"},{"type":"function","name":"get_total_supply","inputs":[],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"balance_of","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"core::starknet::contract_address::ContractAddress"},{"name":"spender","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"recipient","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"transfer_from","inputs":[{"name":"sender","type":"core::starknet::contract_address::ContractAddress"},{"name":"recipient","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"increase_allowance","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"added_value","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"decrease_allowance","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"subtracted_value","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"core::starknet::contract_address::ContractAddress"},{"name":"to","type":"core::starknet::contract_address::ContractAddress"},{"name":"value","type":"core::integer::u256"}]},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"core::starknet::contract_address::ContractAddress"},{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"value","type":"core::integer::u256"}]}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment