aelf-sdk.cs - aelf C# API
aelf-sdk.cs
is a C# library that facilitates communication with an aelf node over HTTP. Below is a comprehensive guide on how to install and use the aelf-sdk.cs
package, along with some example usages.
Introduction
aelf-sdk.cs
is a collection of libraries designed for interaction with both local and remote aelf nodes via HTTP connections. This documentation provides instructions on how to install and run aelf-sdk.cs
, and includes API reference documentation with examples. aelf-sdk.cs
Adding aelf-sdk.cs package
To use aelf-sdk.cs
, you need to add the AElf.Client package to your project. This can be done using various methods:
Using Package Manager
Open the Package Manager Console in Visual Studio and run:
PM> Install-Package AElf.Client
Using .NET CLI
Run the following command in your terminal:
dotnet add package AElf.Client
Using PackageReference
Add the following line to your .csproj
file:
<PackageReference Include="AElf.Client" Version="X.X.X" />
Replace X.X.X
with the desired version of the AElf.Client
package.
Examples
1. Create Instance
Create a new instance of AElfClient and set the URL of an aelf chain node.
using AElf.Client.Service;
// Create a new instance of AElfClient
AElfClient client = new AElfClient("http://127.0.0.1:1235");
2. Test Connection
Check that the aelf chain node is connectable.
var isConnected = await client.IsConnectedAsync();
Console.WriteLine($"Connected: {isConnected}");
3. Initiate a Transfer Transaction
// Get token contract address.
var tokenContractAddress = await client.GetContractAddressByNameAsync(HashHelper.ComputeFrom("AElf.ContractNames.Token"));
var methodName = "Transfer";
var param = new TransferInput
{
To = new Address {Value = Address.FromBase58("7s4XoUHfPuqoZAwnTV7pHWZAaivMiL8aZrDSnY9brE1woa8vz").Value},
Symbol = "ELF",
Amount = 1000000000,
Memo = "transfer in demo"
};
var ownerAddress = client.GetAddressFromPrivateKey(PrivateKey);
// Generate a transfer transaction.
var transaction = await client.GenerateTransaction(ownerAddress, tokenContractAddress.ToBase58(), methodName, param);
var txWithSign = client.SignTransaction(PrivateKey, transaction);
// Send the transfer transaction to AElf chain node.
var result = await client.SendTransactionAsync(new SendTransactionInput
{
RawTransaction = txWithSign.ToByteArray().ToHex()
});
await Task.Delay(4000);
// After the transaction is mined, query the execution results.
var transactionResult = await client.GetTransactionResultAsync(result.TransactionId);
Console.WriteLine(transactionResult.Status);
// Query account balance.
var paramGetBalance = new GetBalanceInput
{
Symbol = "ELF",
Owner = new Address {Value = Address.FromBase58(ownerAddress).Value}
};
var transactionGetBalance =await client.GenerateTransaction(ownerAddress, tokenContractAddress.ToBase58(), "GetBalance", paramGetBalance);
var txWithSignGetBalance = client.SignTransaction(PrivateKey, transactionGetBalance);
var transactionGetBalanceResult = await client.ExecuteTransactionAsync(new ExecuteTransactionDto
{
RawTransaction = txWithSignGetBalance.ToByteArray().ToHex()
});
var balance = GetBalanceOutput.Parser.ParseFrom(ByteArrayHelper.HexstringToByteArray(transactionGetBalanceResult));
Console.WriteLine(balance.Balance);
Web API
You can see how the Web API of the node works at {chainAddress}/swagger/index.html
. For example, on a local address: http://127.0.0.1:1235/swagger/index.html
.
Here are the examples and code snippets for interacting with the aelf Web API using the AElfClient
instance.
1. Create Instance
Create a new instance of AElfClient and set the URL of an aelf chain node.
using AElf.Client.Service;
// Create a new instance of AElfClient, change the URL if needed
AElfClient client = new AElfClient("http://127.0.0.1:1235");
2. Get Chain Status
-
Web API path:
/api/blockChain/chainStatus
-
Parameters : None
-
Returns:
ChainStatusDto
- ChainId - string
- Branches - Dictionary
<string,long>
- NotLinkedBlocks - Dictionary
<string,string>
- LongestChainHeight - long
- LongestChainHash - string
- GenesisBlockHash - string
- GenesisContractAddress - string
- LastIrreversibleBlockHash - string
- LastIrreversibleBlockHeight - long
- BestChainHash - string
- BestChainHeight - long
Example:
await client.GetChainStatusAsync();
3. Get Contract File Descriptor Set
-
Web API path:
/api/blockChain/contractFileDescriptorSet
-
Parameters :
- contractAddress - string
-
Returns:
[]byte
Example:
await client.GetContractFileDescriptorSetAsync(address);
4. Get Block Height
-
Web API path:
/api/blockChain/blockHeight
-
Parameters : None
-
Returns:
long
Example:
await client.GetBlockHeightAsync();
5. Get Block Information by Block Hash
-
Web API path:
/api/blockChain/block
-
Parameters :
- blockHash - string
- includeTransactions - bool
-
Returns:
BlockDto
- BlockHash - string
- Header - BlockHeaderDto
- PreviousBlockHash - string
- MerkleTreeRootOfTransactions - string
- MerkleTreeRootOfWorldState - string
- Extra - string
- Height - long
- Time - string
- ChainId - string
- Bloom - string
- SignerPubkey - string
- Body - BlockBodyDto
- TransactionsCount - int
- Transactions - []string
Example:
await client.GetBlockByHashAsync(blockHash);
6. Get Block Information by Block Height
-
Web API path:
/api/blockChain/blockByHeight
-
Parameters :
- blockHeight - long
- includeTransactions - bool
-
Returns:
BlockDto
- BlockHash - string
- Header - BlockHeaderDto
- PreviousBlockHash - string
- MerkleTreeRootOfTransactions - string
- MerkleTreeRootOfWorldState - string
- Extra - string
- Height - long
- Time - string
- ChainId - string
- Bloom - string
- SignerPubkey - string
- Body - BlockBodyDto
- TransactionsCount - int
- Transactions - []string
Example:
await client.GetBlockByHeightAsync(height);
7. Get Transaction Result
-
Web API path:
/api/blockChain/transactionResult
-
Parameters :
- transactionId - string
-
Returns:
TransactionResultDto
- TransactionId - string
- Status - string
- Logs - []LogEventDto
- Address - string
- Name - string
- Indexed - []string
- NonIndexed - string
- Bloom - string
- BlockNumber - long
- BlockHash - string
- Transaction - TransactionDto
- From - string
- To - string
- RefBlockNumber - long
- RefBlockPrefix - string
- MethodName - string
- Params - string
- Signature - string
- Error - string
Example:
await client.GetTransactionResultAsync(transactionId);
8. Get Multiple Transaction Results in a Block
-
Web API path:
/api/blockChain/transactionResults
-
Parameters :
- blockHash - string
- offset - int
- limit - int
-
Returns:
List<TransactionResultDto>
- The array of transaction result:- the transaction result object
Example:
await client.GetTransactionResultsAsync(blockHash, 0, 10);
9. Get Transaction Pool Status
-
Web API path:
/api/blockChain/transactionPoolStatus
-
Parameters : None
-
Returns:
TransactionPoolStatusOutput
- Queued - int
- Validated - int
Example:
var transactionPoolStatus = await client.GetTransactionPoolStatusAsync();
10. Send Transaction
-
Web API path:
/api/blockChain/sendTransaction
(POST) -
Parameters :
SendRawTransactionInput
- Serialization of data into protobuf data: -RawTransaction
- string
-
Returns:
SendRawTransactionOutput
- TransactionId - string
Example:
var sendTransactionOutput = await client.SendTransactionAsync(sendTransactionInput);
11. Send Raw Transaction
-
Web API path:
/api/blockChain/sendTransaction
(POST) -
Parameters :
- SendRawTransactionInput - Serialization of data into protobuf data:
Transaction
- stringSignature
- stringReturnTransaction
- bool
- SendRawTransactionInput - Serialization of data into protobuf data:
-
Returns:
SendRawTransactionOutput
- TransactionId - string
- Transaction - TransactionDto
Example:
var sendRawTransactionInput = new SendRawTransactionInput
{
Transaction = "YOUR_RAW_TRANSACTION",
Signature = "YOUR_SIGNATURE",
ReturnTransaction = true
};
var sendRawTransactionOutput = await client.SendRawTransactionAsync(sendRawTransactionInput);
Console.WriteLine($"Transaction ID: {sendRawTransactionOutput.TransactionId}");
12. Send Multiple Transactions
-
Web API path:
/api/blockChain/sendTransactions
(POST) -
Parameters :
SendTransactionsInput
- Serialization of data into protobuf data:SendTransactionsInput
- string
-
Returns:
string[]
Example:
await client.SendTransactionsAsync(input);
13. Create Raw Transaction
-
Web API path:
/api/blockChain/rawTransaction
(POST) -
Parameters :
CreateRawTransactionInput
From
- stringTo
- stringRefBlockNumber
- longRefBlockHash
- stringMethodName
- stringParams
- string
-
Returns:
CreateRawTransactionOutput
RawTransactions
- string
Example:
await client.CreateRawTransactionAsync(input);
14. Execute Transaction
-
Web API path:
/api/blockChain/executeTransaction
(POST) -
Parameters :
ExecuteRawTransactionDto
- Serialization of data into protobuf data:RawTransaction
- string
-
Returns:
string
Example:
await client.ExecuteRawTransactionAsync(input);
15. Execute Raw Transaction
-
Web API path:
/api/blockChain/executeRawTransaction
(POST) -
Parameters :
ExecuteRawTransactionDto
- Serialization of data into protobuf data:RawTransaction
- stringSignature
- string
-
Returns:
string
Example:
await client.ExecuteRawTransactionAsync(input);
16. Get Peers
-
Web API path:
/api/net/peers
-
Parameters :
withMetrics
- bool
-
Returns:
List<PeerDto>
IpAddress
- stringProtocolVersion
- intConnectionTime
- longConnectionStatus
- stringInbound
- boolBufferedTransactionsCount
- intBufferedBlocksCount
- intBufferedAnnouncementsCount
- intNodeVersion
- stringRequestMetrics
- List<RequestMetric>
RoundTripTime
- longMethodName
- stringInfo
- stringRequestTime
- string
Example:
await client.GetPeersAsync(false);
17. Add Peer
Attempts to remove a node from the connected network nodes.
-
Web API path:
/api/net/peer
(POST) -
Parameters :
ipAddress
- string
-
Returns:
bool
Example:
await client.AddPeerAsync("127.0.0.1:7001");
18. Remove Peer
Attempts to remove a node from the connected network nodes.
-
Web API path:
/api/net/peer
(DELETE) -
Parameters :
ipAddress
- string
-
Returns:
bool
await client.RemovePeerAsync("127.0.0.1:7001");
19. Calculate Transaction Fee
-
Web API path:
/api/blockChain/calculateTransactionFee
(POST) -
Parameters :
CalculateTransactionFeeInput
- The object with the following structure :RawTrasaction
- string
-
Returns:
TransactionFeeResultOutput
Success
- boolTransactionFee
- map[string]interfaceResourceFee
- map[string]interface
Example:
var input = new CalculateTransactionFeeInput{
RawTransaction = RawTransaction
};
await Client.CalculateTransactionFeeAsync(input);
20. Get Network Information
-
Web API path:
/api/net/networkInfo
-
Parameters : Empty
-
Returns:
NetworkInfoOutput
Version
- stringProtocolVersion
- intConnections
- int
Example:
await client.GetNetworkInfoAsync();
These examples demonstrate how to use the aelf Web API in C# using the AElfClient
class to interact with the aelf blockchain, including checking chain status, handling transactions, and managing network peers.
aelf Client
1. IsConnected
Verify whether this SDK successfully connects to the chain.
-
Parameters: None
-
Returns :
bool
: Connection status
Example:
bool isConnected = await client.IsConnectedAsync();
Console.WriteLine($"Is Connected: {isConnected}");
2. GetGenesisContractAddress
Get the address of the genesis contract.
-
Parameters: None
-
Returns :
string
: Genesis contract address
Example:
await client.GetGenesisContractAddressAsync();
3. GetContractAddressByName
Get the address of a contract by the given contract name hash.
-
Parameters:
contractNameHash
(string): Hash of the contract name
-
Returns :
string
: Contract address
Example:
await client.GetContractAddressByNameAsync(contractNameHash);
4. GenerateTransaction
Build a transaction from the input parameters.
-
Parameters:
from
(string): Sender's addressto
(string): Recipient's addressmethodName
(string): Method nameinput
IMessage
-
Returns :
Transaction
: Built transaction
Example:
await client.GenerateTransactionAsync(from, to, methodName, input);
5. GetFormattedAddress
Convert the Address
to the displayed string format: symbol_base58-string_base58-string_chain-id.
-
Parameters:
address
(string): Address to format
-
Returns :
string
: Formatted address
Example:
await client.GetFormattedAddressAsync(address);
6. SignTransaction
-
Parameters:
privateKey
(string): Address to formattransaction
(string): Address to format
-
Returns :
Transaction
Example:
client.SignTransaction(privateKeyHex, transaction);
7. GetAddressFromPubKey
Get the account address through the public key.
-
Parameters:
pubKey
(string): Public key
-
Returns :
string
: Account address
Example:
client.GetAddressFromPubKey(pubKey);
8. GetAddressFromPrivateKey
Get the account address through the private key.
-
Parameters:
privateKey
(string): Private key
-
Returns :
string
: Account address
Example:
client.GetAddressFromPrivateKey(privateKeyHex);
9. GenerateKeyPairInfo
Generate a new account key pair.
-
Parameters: None
-
Returns :
KeyPairInfo
PrivateKey
- stringPublicKey
- stringAddress
- string
Example:
client.GenerateKeyPairInfo();
Supports
.NET Standard 2.0