Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
In this section we will provide examples to common usage patterns of Secret.NET
using SecretNET;
using SecretNET.Common;
using SecretNET.Common.Storage;
using SecretNET.Tx;
// Select a storage provider for the wallet
// Docs: https://github.com/0xxCodemonkey/SecretNET#creating--initializing-the-wallet
var storageProvider = new AesEncryptedFileStorage("", "SuperSecurePassword");
var createWalletOptions = new CreateWalletOptions(storageProvider);
// Import wallet from mnemonic phrase
// Use key created snippet "Create a new Wallet"
Wallet wallet = null;
if (await storageProvider.HasPrivateKey())
{
var storedMnemonic = await storageProvider.GetFirstMnemonic();
Console.WriteLine("Use stored mnemonic: " + storedMnemonic);
wallet = await Wallet.Create(storedMnemonic, options: createWalletOptions);
Console.WriteLine("wallet.Address: " + wallet.Address);
}
// get infos from https://docs.scrt.network/secret-network-documentation/development/connecting-to-the-network
var gprcUrl = "https://grpc.testnet.secretsaturn.net";
var chainId = "pulsar-3";
// Create a connection to Secret Network node
// Pass in a wallet that can sign transactions
// Docs: https://github.com/0xxCodemonkey/SecretNET#creating--initializing-the-wallet
var secretClient = new SecretNetworkClient(gprcUrl, chainId, wallet: wallet);
// Upload the wasm of a simple contract
byte[] wasmByteCode = File.ReadAllBytes(@"mysimplecounter.wasm.gz");
// MsgStoreCode
var msgStoreCodeCounter = new MsgStoreCode(
wasmByteCode,
source: "", // Source is a valid absolute HTTPS URI to the contract's source code, optional
builder: "" // Builder is a valid docker image name with tag, optional
);
var storeCodeResponse = await secretClient.Tx.Compute.StoreCode(msgStoreCodeCounter, new TxOptions() { GasLimit = 2_000_000 });
var codeId = storeCodeResponse.Response.CodeId;
// contract hash, useful for contract composition
var contractCodeHash = await secretClient.Query.Compute.GetCodeHashByCodeId(codeId);
// Create an instance of the Counter contract, providing a starting count
var msgInitContract = new MsgInstantiateContract(
codeId: codeId,
label: $"My Counter {codeId}",
initMsg: new { count = 100 },
codeHash: contractCodeHash); // optional but way faster
var initContractResponse = await secretClient.Tx.Compute.InstantiateContract(msgInitContract, new TxOptions() { GasLimit = 200_000 });
//Find the contract_address in the logs
var contractAddress = initContractResponse?.Response?.Address;
var msgExecuteContract = new MsgExecuteContract(
contractAddress: contractAddress,
msg: new { increment = new { } },
codeHash: contractCodeHash);
var tx = await secretClient.Tx.Compute.ExecuteContract(msgExecuteContract, new TxOptions() { GasLimit = 200_000 });
// Query the current count
Console.WriteLine("Querying contract for current count");
await secretClient.Query.Compute.QueryContract<string>(
contractAddress,
new { get_count = new { } },
contractCodeHash);
using SecretNET;
using SecretNET.Common;
using SecretNET.Common.Storage;
using SecretNET.Tx;
// Select a storage provider for the wallet
// Docs: https://github.com/0xxCodemonkey/SecretNET#creating--initializing-the-wallet
var storageProvider = new AesEncryptedFileStorage("", "SuperSecurePassword");
var createWalletOptions = new CreateWalletOptions(storageProvider);
// Import wallet from mnemonic phrase
// Use key created snippet "Create a new Wallet"
Wallet wallet = null;
if (await storageProvider.HasPrivateKey())
{
var storedMnemonic = await storageProvider.GetFirstMnemonic();
Console.WriteLine("Use stored mnemonic: " + storedMnemonic);
wallet = await Wallet.Create(storedMnemonic, options: createWalletOptions);
Console.WriteLine("wallet.Address: " + wallet.Address);
}
// get infos from https://docs.scrt.network/secret-network-documentation/development/connecting-to-the-network
var gprcUrl = "https://grpc.testnet.secretsaturn.net";
var chainId = "pulsar-3";
// Create a connection to Secret Network node
// Pass in a wallet that can sign transactions
// Docs: https://github.com/0xxCodemonkey/SecretNET#creating--initializing-the-wallet
var secretClient = new SecretNetworkClient(gprcUrl, chainId, wallet: wallet);
var tx = await secretClient.Tx.Bank.Send(
toAddress: "secret1j8u7n4v93kjyqa7wzzrgjule8gh4adde36mnwd",
amount: 1000000,
denom: "uscrt",
txOptions: new TxOptions() { GasLimit = 2_000_000 }
);
Console.WriteLine("Transaction: ", tx);
using SecretNET;
using SecretNET.Common;
using SecretNET.Common.Storage;
using System;
// Select a storage provider for the wallet
// Docs: https://github.com/0xxCodemonkey/SecretNET#creating--initializing-the-wallet
var storageProvider = new AesEncryptedFileStorage("", "SuperSecurePassword");
var createWalletOptions = new CreateWalletOptions(storageProvider);
// Create a new account
var wallet = await Wallet.Create(options: createWalletOptions);
// get infos from https://docs.scrt.network/secret-network-documentation/development/connecting-to-the-network
var gprcUrl = "https://grpc.testnet.secretsaturn.net";
var chainId = "pulsar-3";
// Create a readonly connection to Secret Network node (does not attach the wallet)
var secretClient = new SecretNetworkClient(gprcUrl, chainId, wallet: null); // without a wallet
var response = await secretClient.Query.Bank.Balance(wallet.Address);
Console.WriteLine("Mnemonic: " + (await storageProvider.GetMnemonic(wallet.Address)));
Console.WriteLine("Address: " + wallet.Address);
Console.WriteLine($"Balance: {(float.Parse(response.Amount) / 1000000f)} SCRT"); // 1,000,00 uscrt = 1 SCRT
var permit = await secretClient.Permit.Sign(
owner: wallet.Address,
chainId: secretClient.ChainId,
permitName: "test",
allowedContracts: new string[] { contractAddress },
permissions: new PermissionType[] {
PermissionType.Owner,
PermissionType.Balance
});
var snip20Client = new SecretNET.Token.Snip20Client(secretClient); // SecretNET.Token
var query = await snip20Client.Query.GetBalance(contractAddress, permit: permit, codeHash: permitContractCodeHash);
var permit = await secretClient.Permit.Sign(
owner: wallet.Address,
chainId: secretClient.ChainId,
permitName: "test",
allowedTokens: new string[] { "abcdef" },
permissions: new PermissionType[] {
PermissionType.Owner
});
var result = secretClient.Permit.Verify(
permit,
wallet.Address,
"abcdef",
new PermissionType[] { PermissionType.Owner }
);
is a layer on top of the Secret.NET which supports all methods of the of the .
is a layer on top of the Secret.NET which supports all methods of the of the .
var snip721Client = new SecretNET.NFT.Snip721Client(secretClient); // SecretNET.NFT
var addMinterMsg = new SecretNET.NFT.AddMinterRequest(minters: new[] { "" });
var addMinter = await snip721Client.Tx.AddMinter(
msg: new SecretNET.NFT.MsgAddMinter(addMinterMsg, contractAddress, codeHash),
txOptions: new TxOptions() { GasLimit = 100_000 });
var mintNftMsg = SecretNET.NFT.MintNftRequest.Create(tokenId: "1");
var mintNft = await snip721Client.Tx.MintNft(
msg: new SecretNET.NFT.MsgMintNft(mintNftMsg, contractAddress, codeHash),
txOptions: new TxOptions() { GasLimit = 200_000 });
var transferNftMsg = new SecretNET.NFT.TransferNftRequest(recipient, tokenId);
var transferNft = await snip721Client.Tx.TransferNft(
msg: new SecretNET.NFT.MsgTransferNft(transferNftMsg, contractAddress, codeHash),
txOptions: new TxOptions() { GasLimit = 50_000 });
var permit = await secretClient.Permit.Sign(
owner: wallet.Address,
chainId: secretClient.ChainId,
permitName: "test",
allowedContracts: new string[] { contractAddress },
permissions: new PermissionType[] {
PermissionType.Owner
});
var tokens = await snip721Client.Query.GetTokens(contractAddress, wallet.Address, permit: permit, codeHash: codeHash);
var txExec = await snip20Client.Tx.SetViewingKey(
contractAddress,
"hello",
txOptions: new TxOptions() { GasLimit = 100_000 });
var tokens = await snip721Client.Query.GetTokens(contractAddress, wallet.Address, viewingKey: "hello", codeHash: codeHash);
var snip20Client = new SecretNET.Token.Snip20Client(secretClient);
var txExec = await snip20Client.Tx.Transfer(
contractAddress,
recipient,
amount, // int as string
codeHash,
txOptions: new TxOptions() { GasLimit = 5_000_000 }
);
var txExec = await snip20Client.Tx.Send(
contractAddress,
recipient,
amount, // int as string
codeHash,
txOptions: new TxOptions() { GasLimit = 5_000_000 }
);
var txExec = await snip20Client.Tx.SetViewingKey(
contractAddress,
"hello",
txOptions: new TxOptions() { GasLimit = 100_000 });
var txQuery = await snip20Client.Query.GetBalance(
contractAddress,
viewingKey: "hello",
codeHash: codeHash
);
var txQuery = await await snip20Client.Query.GetTokenInfo(
contractAddress,
codeHash: codeHash
);
var txQuery = await snip20Client.Query.GetTransactionHistory(
contractAddress,
pageSize: 10,
viewingKey: "hello",
codeHash: codeHash
);