algo - add stuff to tilt (#1230)

* algo - add stuff to tilt

* terra: fix terra test (#1231)

* terra: fix terra test

* Update terra git bits

Co-authored-by: Jeff Schroeder <jeffschroeder@computer.org>

* algo - add stuff to tilt

Co-authored-by: Evan Gray <56235822+evan-gray@users.noreply.github.com>
Co-authored-by: Jeff Schroeder <jeffschroeder@computer.org>
This commit is contained in:
Paul Noel 2022-05-31 19:49:38 +00:00 committed by GitHub
parent 90beeac4e6
commit 6967f44e55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 189 additions and 9 deletions

View File

@ -19,5 +19,6 @@ RUN pipenv install
RUN mkdir teal
COPY *.py .
COPY test/*.json .
COPY deploy.sh deploy.sh
COPY .env .env

View File

@ -1,5 +1,6 @@
# python3 -m pip install pycryptodomex uvarint pyteal web3 coincurve
import os
from os.path import exists
from time import time, sleep
from eth_abi import encode_single, encode_abi
@ -1187,6 +1188,65 @@ class PortalCore:
self.client.send_transactions(signedTxns)
print("Sent some ALGO to: " + wallet)
print("Creating a Token...")
txn = transaction.AssetConfigTxn(
sender=a.getAddress(),
sp=suggestedParams,
total=1000000,
default_frozen=False,
unit_name="NORIUM",
asset_name="ChuckNorium",
manager=a.getAddress(),
reserve=a.getAddress(),
freeze=a.getAddress(),
clawback=a.getAddress(),
strict_empty_address_check=False,
decimals=6)
stxn = txn.sign(a.getPrivateKey())
txid = self.client.send_transaction(stxn)
print("NORIUM creation transaction ID: {}".format(txid))
confirmed_txn = transaction.wait_for_confirmation(self.client, txid, 4)
print("TXID: ", txid)
print("Result confirmed in round: {}".format(confirmed_txn['confirmed-round']))
print("Creating an NFT...")
# JSON file
dir_path = os.path.dirname(os.path.realpath(__file__))
f = open (dir_path + 'cnNftMetadata.json', "r")
# Reading from file
metadataJSON = json.loads(f.read())
metadataStr = json.dumps(metadataJSON)
hash = hashlib.new("sha512_256")
hash.update(b"arc0003/amj")
hash.update(metadataStr.encode("utf-8"))
json_metadata_hash = hash.digest()
print("json_metadata_hash: ", hash.hexdigest())
# Create transaction
txn = transaction.AssetConfigTxn(
sender=a.getAddress(),
sp=suggestedParams,
total=1,
default_frozen=False,
unit_name="CNART",
asset_name="ChuckNoriumArtwork@arc3",
manager=a.getAddress(),
reserve=a.getAddress(),
freeze=a.getAddress(),
clawback=a.getAddress(),
strict_empty_address_check=False,
url="file://cnNftMetadata.json",
metadata_hash=json_metadata_hash,
decimals=0)
stxn = txn.sign(a.getPrivateKey())
txid = self.client.send_transaction(stxn)
print("NORIUM NFT creation transaction ID: {}".format(txid))
confirmed_txn = transaction.wait_for_confirmation(self.client, txid, 4)
print("TXID: ", txid)
print("Result confirmed in round: {}".format(confirmed_txn['confirmed-round']))
if exists(self.args.env):
if self.gt == None:
self.gt = GenTest(False)

View File

@ -0,0 +1,25 @@
{
"name": "CNART",
"description": "ChuckNoriumArtwork",
"image": "https://pngimg.com/image/31756",
"image_integrity": "sha256-/tih/7ew0eziEZIVD4qoTWb0YrElAuRG3b40SnEstyk=",
"properties": {
"simple_property": "ChuckNorium artwork",
"rich_property": {
"name": "ChuckNoriumArt",
"value": "001",
"display_value": "001",
"class": "emphasis",
"css": {
"color": "#ffffff",
"font-weight": "bold",
"text-decoration": "underline"
}
},
"array_property": {
"name": "Artwork",
"value": [1, 2, 3, 4],
"class": "emphasis"
}
}
}

View File

@ -204,21 +204,21 @@ export async function getBalances(
): Promise<Map<number, number>> {
let balances = new Map<number, number>();
const accountInfo = await client.accountInformation(account).do();
// console.log("Account Info:", accountInfo);
// console.log("Account Info|created-assets:", accountInfo["created-assets"]);
console.log("Account Info:", accountInfo);
console.log("Account Info|created-assets:", accountInfo["created-assets"]);
// Put the algo balance in key 0
balances.set(0, accountInfo.amount);
const assets: Array<any> = accountInfo.assets;
// console.log("assets", assets);
console.log("assets", assets);
assets.forEach(function (asset) {
// console.log("inside foreach", asset);
console.log("inside foreach", asset);
const assetId = asset["asset-id"];
const amount = asset.amount;
balances.set(assetId, amount);
});
// console.log("balances", balances);
console.log("balances", balances);
return balances;
}
@ -267,11 +267,13 @@ export async function createAsset(account: Account): Promise<any> {
// Used to display asset units to user
const unitName = "NORIUM";
// Friendly name of the asset
const assetName = "chuckNorium";
const assetName = "ChuckNorium";
// Optional string pointing to a URL relating to the asset
const assetURL = "http://www.chucknorris.com";
// const assetURL = "http://www.chucknorris.com";
const assetURL = "";
// Optional hash commitment of some sort relating to the asset. 32 character length.
const assetMetadataHash = "16efaa3924a6fd9d3a4824799a4ac65d";
// const assetMetadataHash = "16efaa3924a6fd9d3a4824799a4ac65d";
const assetMetadataHash = "";
// The following parameters are the only ones
// that can be changed, and they have to be changed
// by the current manager
@ -323,6 +325,74 @@ export async function createAsset(account: Account): Promise<any> {
return assetID;
}
export async function createNFT(account: Account): Promise<number> {
console.log("Creating NFT...");
const aClient = getAlgoClient();
const params = await aClient.getTransactionParams().do();
// Asset creation specific parameters
const addr = account.addr;
// Whether user accounts will need to be unfrozen before transacting
const defaultFrozen = false;
// integer number of decimals for asset unit calculation
const decimals = 0;
// total number of this asset available for circulation
const total = 1;
// Used to display asset units to user
const unitName = "CNART";
// Friendly name of the asset
const assetName = "ChuckNoriumArtwork@arc3";
// Optional string pointing to a URL relating to the asset
const assetURL = "http://www.chucknorris.com";
// Optional hash commitment of some sort relating to the asset. 32 character length.
const assetMetadataHash = "16efaa3924a6fd9d3a4824799a4ac65d";
// The following parameters are the only ones
// that can be changed, and they have to be changed
// by the current manager
// Specified address can change reserve, freeze, clawback, and manager
const manager = account.addr;
// Specified address is considered the asset reserve
// (it has no special privileges, this is only informational)
const reserve = account.addr;
// Specified address can freeze or unfreeze user asset holdings
const freeze = account.addr;
// Specified address can revoke user asset holdings and send
// them to other addresses
const clawback = account.addr;
// signing and sending "txn" allows "addr" to create an asset
const txn = algosdk.makeAssetCreateTxnWithSuggestedParamsFromObject({
from: addr,
total,
decimals,
assetName,
unitName,
assetURL,
assetMetadataHash,
defaultFrozen,
freeze,
manager,
clawback,
reserve,
suggestedParams: params,
});
const rawSignedTxn = txn.signTxn(account.sk);
// console.log("rawSignedTxn:", rawSignedTxn);
const tx = await aClient.sendRawTransaction(rawSignedTxn).do();
// wait for transaction to be confirmed
const ptx = await algosdk.waitForConfirmation(aClient, tx.txId, 4);
// Get the new asset's information from the creator account
const assetID: number = ptx["asset-index"];
console.log(
"createNFT() - Transaction " +
tx.txId +
" confirmed in round " +
ptx["confirmed-round"]
);
return assetID;
}
export async function getForeignAssetFromVaaAlgorand(
client: Algodv2,
tokenBridgeId: bigint,

View File

@ -12,7 +12,12 @@ import {
optin,
_parseVAAAlgorand,
} from "../Algorand";
import { getAlgoClient, getTempAccounts } from "./testHelpers";
import {
createNFT,
getAlgoClient,
getBalances,
getTempAccounts,
} from "./testHelpers";
import { PopulateData, TmplSig } from "../TmplSig";
const CORE_ID = BigInt(4);
@ -171,5 +176,24 @@ describe("Unit Tests", () => {
done();
})();
});
test("Create NFT", (done) => {
(async () => {
try {
console.log("Starting account exists...");
const client: algosdk.Algodv2 = getAlgoClient();
const tempAccts: Account[] = await getTempAccounts();
const numAccts: number = tempAccts.length;
expect(numAccts).toBeGreaterThan(0);
const wallet: Account = tempAccts[0];
const b = await getBalances(client, wallet.addr);
const nftId = await createNFT(wallet);
const balances = await getBalances(client, wallet.addr);
} catch (e) {
console.error("Create NFT error:", e);
expect(false).toBe(true);
}
done();
})();
});
});
});