Я использовал пакеты Nudget TronNet версии 0.2.0
но всегда возникала какая-нибудь ошибка. Поэтому я собрал метод на основе документации и некоторых других примеров.
Я пытался просто передать активы usdt с помощью сети tron, похоже, пакеты не работают. Вот один из многих перенести пробную версию
Код: Выделить всё
public static async Task TransferTrc20Token(string tokenContractAddress, string walletAddress,
string privateKey, string toAddress, decimal amount)
{
// Create the transfer contract
var transferContract = new TransferContract
{
OwnerAddress = ByteString.CopyFrom(Base58Encoder.DecodeFromBase58Check(walletAddress)),
ToAddress = ByteString.CopyFrom(Base58Encoder.DecodeFromBase58Check(toAddress)),
Amount = (long)(amount * 1000000m)
};
// Create the transaction
var transaction = new Transaction
{
RawData = new Transaction.Types.raw
{
Contract = { new Transaction.Types.Contract
{
Type = Transaction.Types.Contract.Types.ContractType.TransferContract,
Parameter = Google.Protobuf.WellKnownTypes.Any.Pack(transferContract)
}},
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds(),
Expiration = DateTimeOffset.Now.AddHours(1).ToUnixTimeMilliseconds()
}
};
// Sign the transaction
transaction = SignTransaction(transaction, privateKey);
// Serialize the transaction
var serializedTransaction = transaction.ToByteArray();
// Convert the serialized transaction to hexadecimal string
var transactionHex = BitConverter.ToString(serializedTransaction).Replace("-", "");
// Create the REST client
var client = new RestClient("https://api.trongrid.io/wallet/easytransfer");
var request = new RestRequest();
request.Method = Method.Post;
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\"transaction\":\"" + transactionHex + "\"}", ParameterType.RequestBody);
// Send the request
var response = await client.ExecuteAsync(request);
if (response.IsSuccessful)
{
// Handle successful response
Console.WriteLine("Transfer successful");
}
else
{
// Handle error response
Console.WriteLine("Transfer failed: " + response.ErrorMessage);
}
}
private static Transaction SignTransaction(Transaction transaction, string privateKey)
{
byte[] privateKeyBytes;
if (privateKey.Length == 64)
{
privateKeyBytes = StringToByteArray(privateKey);
}
else
{
// Decode private key from Base58Check format
privateKeyBytes = TronNet.Crypto.Base58Encoder.DecodeFromBase58Check(privateKey);
}
var ecKey = new ECKey(privateKeyBytes, true);
var rawdata = transaction.RawData.ToByteArray();
var hash = rawdata.ToSHA256Hash();
var signature = ecKey.Sign(hash).ToByteArray();
transaction.Signature.Add(ByteString.CopyFrom(signature));
return transaction;
}
private static byte[] StringToByteArray(string hex)
{
int length = hex.Length;
byte[] bytes = new byte[length / 2];
for (int i = 0; i < length; i += 2)
{
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
return bytes;
}
Источник: https://stackoverflow.com/questions/763 ... -and-tronn