{"version":3,"sources":["ic/neuron.js","ic/candid/ext.did.js","ic/extjs.js","ic/RosettaApi.js","ic/candid/ledger.did.js","ic/candid/governance.did.js","ic/candid/nns.did.js","ic/candid/hzld.did.js","components/AccountDrawer.js","components/TokenCard.js","ic/secp256k1.js","ic/identity.js","components/Transactions.js","components/NFTList.js","components/MainFab.js","views/AccountDetail.js","components/NeuronForm.js","components/TopupNeuronForm.js","containers/Wallet.js","Mycomponents.js","App.js","store.js","theme.js","index.js","ic/utils.js"],"names":["getStakingAddress","principal","nonce","Buffer","length","hash","data","shaObj","jsSha256","create","update","blobFromUint8Array","Uint8Array","array","sha256","Principal","fromText","toBlob","principalToAccountIdentifier","GOVERNANCE_CANISTER_ID","Array","from","ICNeuron","constructor","neuronid","neurondata","identity","id","Error","this","toString","extjs","connect","canister","from_sa","amount","args","getSubAccountArray","address","amountToBigInt","LEDGER_CANISTER_ID","send_dfx","controller","memo","rosettaApi","getTransactionsByAccount","then","rs","Number","claim_or_refresh_neuron_from_account","NeuronManager","getData","cmdBody","new_controller","res","manage_neuron","command","hasOwnProperty","JSON","stringify","error_message","commandArgs","amount_e8s","BigInt","topic","neuron","cmdId","operation","seconds","dissolve_timestamp_seconds","to_account","scan","async","ns","list_neurons","include_neurons_readable_by_caller","neuron_ids","rns","full_neurons","map","n","i","nid","nn","neuron_infos","find","e","ndata","age","age_seconds","created","created_timestamp_seconds","dissolve_delay","dissolve_delay_seconds","retreived","retrieved_at_timestamp_seconds","state","voting_power","stake","cached_neuron_stake_e8s","maturity","maturity_e8s_equivalent","fees","neuron_fees_e8s","operator","account","push","sa","index","Math","floor","random","getPrincipal","fill","concat","to32bits","toHexString","stakingTo","toText","nd","result","NeuronId","get","topics","IDL","TokenIdentifier","Text","AccountIdentifier","User","Variant","AllowanceRequest","Record","Balance","Nat","Balance_2","CommonError_2","CommonError","Result_2","SubAccount","Vec","Nat8","ApproveRequest","Opt","BalanceRequest","BalanceResponse","TokenIdentifier_2","AccountIdentifier_3","Result_4","Extension","TokenIndex","Nat32","Metadata","Result_3","MintRequest","Memo","TransferRequest","Bool","TransferResponse","Null","Service","Func","Tuple","constructUser","u","isHex","tokenIdentifier","padding","fromBlob","decodeTokenId","tid","p","splice","token","from32bits","_preloadedIdls","governanceIDL","ledgerIDL","hzldIDL","nnsIDL","extIDL","ExtConnection","host","_mapIdls","NNS_CANISTER_ID","_metadata","name","symbol","decimals","type","_identity","_host","_agent","_canisters","_makeAgent","idl","setIdentity","setHost","cid","Actor","createActor","agent","canisterId","tokenObj","console","log","api","call","fee","Promise","resolve","reject","getMetadata","metadata","r","ok","fungible","nonfungible","err","catch","getBearer","bearer","getBalance","princpal","getAccountBalance","b","getBalanceInsecure","bal","balance","getTransactions","ts","isArray","_ts","_t","status","account1Address","to","account2Address","timestamp","reverse","transfer","from_principal","to_user","notify","alert","bh","fromHexString","mintCycles","_to_sub","getCyclesTopupSubAccount","_to","CYCLES_MINTING_CANISTER_ID","block","e8s","notify_dfx","HttpAgent","JSONbig","jsonBigint","strict","RosettaErrorType","Object","freeze","NotFound","Timeout","NetworkError","RosettaError","message","super","errorType","Transaction","rosettaTransaction","blockIndex","transaction_identifier","timestampMs","div","toNumber","Date","operations","BigNumber","value","isZero","negated","RosettaApi","axios","baseURL","method","transformRequest","transformResponse","parse","headers","networkIdentifier","networksList","network_identifiers","blockchain","accountAddress","response","accountBalanceByAddress","balances","error","isAxiosError","undefined","networkStatus","current_block_identifier","transactionHash","responseTransactions","transactionsByHash","transactions","transaction","block_identifier","limit","maxBlockIndex","offset","max","transactionCount","min","getTransactionByBlock","transactionsByAccount","all","blockTransaction","blockByIndex","url","request","network_identifier","account_identifier","Duration","Nat64","ArchiveOptions","ICPTs","AccountBalanceArgs","BlockHeight","NotifyCanisterArgs","TimeStamp","SendArgs","Proposal","Rec","Followees","NodeProvider","NetworkEconomics","RewardEvent","NeuronStakeTransfer","GovernanceError","Int32","Ballot","Tally","Spawn","Split","Follow","RemoveHotKey","AddHotKey","IncreaseDissolveDelay","SetDissolveTimestamp","Operation","Configure","RegisterVote","DisburseToNeuron","Amount","Disburse","Command","ManageNeuron","ExecuteNnsFunction","RewardToNeuron","RewardToAccount","RewardMode","RewardNodeProvider","SetDefaultFollowees","ApproveGenesisKyc","Change","AddOrRemoveNodeProvider","Motion","Action","ProposalData","ClaimOrRefreshNeuronFromAccount","Command_2","NeuronInFlightCommand","BallotInfo","DissolveState","Neuron","Result","Result_1","ClaimOrRefreshNeuronFromAccountResponse","NeuronInfo","ProposalInfo","ListNeurons","ListNeuronsResponse","ListProposalInfo","ListProposalInfoResponse","SpawnResponse","MakeProposalResponse","DisburseResponse","Command_1","ManageNeuronResponse","AttachCanisterRequest","AttachCanisterResponse","SubAccountDetails","CreateSubAccountResponse","DetachCanisterRequest","DetachCanisterResponse","HardwareWalletAccountDetails","AccountDetails","GetAccountResponse","CanisterDetails","Stats","GetTransactionsRequest","Timestamp","Send","Receive","Transfer","GetTransactionsResponse","HeaderField","HttpRequest","HttpResponse","Nat16","RegisterHardwareWalletRequest","RegisterHardwareWalletResponse","RemoveHardwareWalletRequest","RemoveHardwareWalletResponse","RenameSubAccountRequest","RenameSubAccountResponse","OperatorAction","OperatorRequest","OperatorResponse","drawerWidth","makeStyles","theme","drawer","breakpoints","up","width","flexShrink","toolbar","mixins","drawerPaper","zIndex","ellipticcurve","require","Ecdsa","PrivateKey","PublicKey","stringToBytes","str","ch","st","re","charCodeAt","Secp256k1PublicKey","key","rawKey","derKey","fromDer","toDer","s","toRaw","Secp256k1KeyIdentity","SignIdentity","publicKey","_privateKey","_publicKey","fromRaw","pem","secretKey","fromPem","obj","publicKeyDer","privateKeyDer","blobFromHex","json","parsed","fromParsedJson","pk","privateKey","toJSON","blobToHex","getKeyPair","getPublicKey","challenge","blob","blobFromBuffer","signature","sign","ra","bigintConversion","window","tweetnacl","identities","openlogin","oauths","loadOpenLogin","OpenLogin","clientId","network","uxMode","init","processId","isLoaded","StoicIdentity","getIdentity","setup","optdata","auth","AuthClient","login","maxTimeToLive","identityProvider","onSuccess","onError","localStorage","setItem","mnemonic","mnemonicToId","encrypt","password","_em","ems","getItem","indexOf","privKey","logout","loginProvider","Ed25519KeyIdentity","generate","load","_id","t","unlock","em","nems","decrypt","lock","removeItem","clear","change","validatePrincipal","validateMnemonic","bip39","generateMnemonic","validatePassword","test","root","margin","spacing","display","appBar","marginLeft","menuButton","marginRight","toolbarButtons","content","flexGrow","Mycomponents","props","open","setOpen","React","useState","dispatch","useDispatch","currentPrincipal","useSelector","currentAccount","principals","accounts","currentToken","tokens","setTokens","uid","useEffect","getid","initlogin","alertvue","payload","finally","loader","touser","succcallback","errcallback","_from_principal","_from_sa","_to_user","_amount","_fee","submit","getaddress","useStyles","backdrop","color","emptyAlert","title","App","loaderOpen","setLoaderOpen","appState","setAppState","alertData","setAlertData","confirmData","setConfirmData","showAlert","setShowAlert","showConfirm","setShowConfirm","l","buttonLabel","handler","setTimeout","confirm","buttonCancel","buttonConfirm","v","appData","addresses","initDb","db","savenow","_principal","neurons","apps","subaccount","nfts","app","saveDb","newState","updatedDb","_p","_a","store","createStore","action","apikey","filter","ii","clearState","clearDb","tc","newDb","cp","nft","createMuiTheme","URLSearchParams","location","search","hex2buf","hex","view","parseInt","substring","buf2hex","buffer","x","padStart","join","sendMessageToExtension","success","parent","postMessage","listener","target","verify","sig","encdata","TextEncoder","encode","pubk","crypto","subtle","importKey","namedCurve","addEventListener","getState","a","signed","chain","getDelegation","ReactDOM","render","ThemeProvider","CssBaseline","document","querySelector","sjcl","pbkdf2","pb","sha224","checksum","getCrc32","array2","ba","num","ArrayBuffer","DataView","setUint32","byteArray","byte","slice","substr","bytes","c","seed","mnemonicToSeedSync","d","btoa","atob","h","validateAddress"],"mappings":"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","file":"static/js/main.ba4ebb74.chunk.js","sourcesContent":["/* global BigInt */\nimport { Principal } from \"@dfinity/agent\"; \nimport { GOVERNANCE_CANISTER_ID, LEDGER_CANISTER_ID, rosettaApi, amountToBigInt, principalToAccountIdentifier, toHexString, to32bits, getSubAccountArray } from \"./utils.js\";\nimport extjs from \"./extjs.js\";\nimport { sha256 as jsSha256 } from 'js-sha256';\nimport { blobFromUint8Array } from '@dfinity/agent/lib/esm/types';\n//import {StoicIdentity} from \"./identity.js\";\n\nconst topics = [\n [\"All topics\", 0],\n [\"Neuron Management\", 1],\n [\"Exchange Rate\", 2],\n [\"Network Economics\", 3],\n [\"Governance\", 4],\n [\"Node Admin\", 5],\n [\"Participant Management\", 6],\n [\"Subnet Management\", 7],\n [\"Network Canister Management\", 8],\n [\"KYC\", 9],\n [\"Node Proivuder Rewards\", 10],\n];\nconst sha256 = (data) => {\n const shaObj = jsSha256.create();\n shaObj.update(data);\n return blobFromUint8Array(new Uint8Array(shaObj.array()));\n}\nconst getStakingAddress = (principal, nonce) => {\n if (typeof nonce == 'string') nonce = Buffer(nonce);\n if (nonce.length > 8) return false;\n const array = new Uint8Array([\n [0x0c],\n ...Buffer(\"neuron-stake\"),\n ...Principal.fromText(principal).toBlob(),\n ...nonce\n ]);\n const hash = sha256(array);\n return principalToAccountIdentifier(GOVERNANCE_CANISTER_ID, Array.from(hash));\n}\nclass ICNeuron {\n #api = false;\n #identity = false;\n neuronid = 0;\n id = 0;\n data = {};\n constructor(neuronid, neurondata, identity) {\n if (!neuronid) throw new Error(\"NeuronID is required\");\n if (!identity) throw new Error(\"Identity is required\");\n this.neuronid = neuronid;\n this.id = neuronid.toString();\n this.#identity = identity;\n this.data = neurondata;\n this.#api = extjs.connect(\"https://boundary.ic0.app/\", this.#identity).canister(GOVERNANCE_CANISTER_ID);\n };\n async topup(from_sa, amount) {\n var args = {\n \"from_subaccount\" : [getSubAccountArray(from_sa ?? 0)], \n \"to\" : this.data.address,\n \"amount\" : { \"e8s\" : amountToBigInt(amount, 8) },\n \"fee\" : { \"e8s\" : 10000n }, \n \"memo\" : 0, \n \"created_at_time\" : []\n }\n await extjs.connect(\"https://boundary.ic0.app/\", this.#identity).canister(LEDGER_CANISTER_ID).send_dfx(args);\n var memo = await rosettaApi.getTransactionsByAccount(this.data.address).then(rs => Number(rs[0].memo));\n args = {\n controller : [], \n memo : memo\n };\n await extjs.connect(\"https://boundary.ic0.app/\", this.#identity).canister(GOVERNANCE_CANISTER_ID).claim_or_refresh_neuron_from_account(args);\n return true;\n }\n async update() {\n this.data = await NeuronManager.getData(this.neuronid, this.#identity);\n return this.data;\n };\n async spawn() { //TODO TEST\n var commandArgs = {\n new_controller : []\n };\n var cmdId = \"Spawn\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n async split(amount) { //TODO TEST\n var commandArgs = {\n amount_e8s : BigInt(amount) * BigInt(10**8)\n };\n var cmdId = \"Split\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n async follow(topic, neuron) {\n var commandArgs = {\n topic : BigInt(topic),\n \"followees\" : [{id : BigInt(neuron)}]\n };\n var cmdId = \"Follow\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n async startDissolving() {\n var commandArgs = {\n operation : [{\"StartDissolving\" : {}}]\n };\n var cmdId = \"Configure\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n async stopDissolving() {\n var commandArgs = {\n operation : [{\"StopDissolving\" : {}}]\n };\n var cmdId = \"Configure\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n async increaseDissolveDelay(seconds) {\n var commandArgs = {\n operation : [{\"IncreaseDissolveDelay\" : {\n \"additional_dissolve_delay_seconds\" : BigInt(seconds)\n }}]\n };\n var cmdId = \"Configure\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n async setDissolveTime(seconds) {//not really needed\n var commandArgs = {\n operation : [{\"SetDissolveTimestamp\" : {\n dissolve_timestamp_seconds : BigInt(seconds)\n }}]\n };\n var cmdId = \"Configure\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n async disburse() {\n var commandArgs = {\n to_account : [],\n amount : []\n };\n var cmdId = \"Disburse\";\n var cmdBody = {};\n cmdBody[cmdId] = commandArgs;\n var res = await this.#api.manage_neuron({\n id : [{id : this.neuronid}],\n command : [cmdBody]\n });\n if (res.command[0].hasOwnProperty('Error')) throw new Error(\"Error:\" + JSON.stringify(res.command[0].Error.error_message));\n else return res.command[0][cmdId];\n };\n};\nconst NeuronManager = {\n scan : async (id) => {\n var ns = await extjs.connect(\"https://boundary.ic0.app/\", id).canister(GOVERNANCE_CANISTER_ID).list_neurons({\n include_neurons_readable_by_caller : true,\n neuron_ids : []\n })\n var rns = []\n ns.full_neurons.map((n, i) => {\n var nid = n.id[0].id;\n var nn = ns.neuron_infos.find(e => {\n return (e[0] === nid);\n })[1];\n var ndata = {\n age : nn.age_seconds,\n created : nn.created_timestamp_seconds,\n dissolve_delay : nn.dissolve_delay_seconds,\n retreived : nn.retrieved_at_timestamp_seconds,\n state : nn.state,\n voting_power : nn.voting_power,\n stake : n.cached_neuron_stake_e8s,\n maturity : n.maturity_e8s_equivalent,\n fees : n.neuron_fees_e8s,\n operator : true,\n address : principalToAccountIdentifier(GOVERNANCE_CANISTER_ID, n.account),\n };\n rns.push(new ICNeuron(nid, ndata, id));\n return true;\n });\n return rns;\n },\n create : async (amount, id, sa) => {\n var index = Math.floor(Math.random()*4294967296);\n if (amount < 1) return false;\n var principal = id.getPrincipal();\n var nonce = Array(4).fill(0).concat(to32bits(index));\n var memo = BigInt(\"0x\"+toHexString(nonce));\n var stakingTo = getStakingAddress(principal.toText(), nonce);\n var args = {\n \"from_subaccount\" : [getSubAccountArray(sa ?? 0)], \n \"to\" : stakingTo,\n \"amount\" : { \"e8s\" : amountToBigInt(amount, 8) },\n \"fee\" : { \"e8s\" : 10000n }, \n \"memo\" : Number(memo), \n \"created_at_time\" : []\n }\n \n //Call\n await extjs.connect(\"https://boundary.ic0.app/\", id).canister(LEDGER_CANISTER_ID).send_dfx(args);\n args = {\n controller : [principal], \n memo : Number(memo)\n };\n\n //Call\n var nd = await extjs.connect(\"https://boundary.ic0.app/\", id).canister(GOVERNANCE_CANISTER_ID).claim_or_refresh_neuron_from_account(args);\n if (nd.result[0].hasOwnProperty(\"Error\")) {\n throw new Error(\"Error: \" + JSON.stringify(nd.result[0].Error));\n }\n var neuronid = nd.result[0].NeuronId.id;\n return await NeuronManager.get(neuronid, id);\n },\n get : async (neuronid, id) => {\n var ndata = await NeuronManager.getData(neuronid, id);\n return new ICNeuron(neuronid, ndata, id);\n },\n getData : async (neuronid, id) => {\n var ns = await extjs.connect(\"https://boundary.ic0.app/\", id).canister(GOVERNANCE_CANISTER_ID).list_neurons({\n neuron_ids : [neuronid],\n include_neurons_readable_by_caller : false,\n });\n var ndata = {\n operator : false,\n age : ns.neuron_infos[0][1].age_seconds,\n created : ns.neuron_infos[0][1].created_timestamp_seconds,\n dissolve_delay : ns.neuron_infos[0][1].dissolve_delay_seconds,\n retreived : ns.neuron_infos[0][1].retrieved_at_timestamp_seconds,\n state : ns.neuron_infos[0][1].state,\n voting_power : ns.neuron_infos[0][1].voting_power\n };\n if (ns.full_neurons.length === 1) {\n ndata['stake'] = ns.full_neurons[0].cached_neuron_stake_e8s;\n ndata['maturity'] = ns.full_neurons[0].maturity_e8s_equivalent;\n ndata['fees'] = ns.full_neurons[0].neuron_fees_e8s;\n ndata['operator'] = true;\n ndata['address'] = principalToAccountIdentifier(GOVERNANCE_CANISTER_ID, ns.full_neurons[0].account);\n }\n return ndata;\n },\n topics : topics\n};\nexport default NeuronManager;\n\n","export default ({ IDL }) => {\n const TokenIdentifier = IDL.Text;\n const AccountIdentifier_2 = IDL.Text;\n const AccountIdentifier = AccountIdentifier_2;\n const User = IDL.Variant({\n 'principal' : IDL.Principal,\n 'address' : AccountIdentifier,\n });\n const AllowanceRequest_2 = IDL.Record({\n 'token' : TokenIdentifier,\n 'owner' : User,\n 'spender' : IDL.Principal,\n });\n const AllowanceRequest = AllowanceRequest_2;\n const Balance = IDL.Nat;\n const Balance_2 = Balance;\n const CommonError_2 = IDL.Variant({\n 'InvalidToken' : TokenIdentifier,\n 'Other' : IDL.Text,\n });\n const CommonError = CommonError_2;\n const Result_2 = IDL.Variant({ 'ok' : Balance_2, 'err' : CommonError });\n const SubAccount_2 = IDL.Vec(IDL.Nat8);\n const SubAccount = SubAccount_2;\n const ApproveRequest_2 = IDL.Record({\n 'token' : TokenIdentifier,\n 'subaccount' : IDL.Opt(SubAccount),\n 'allowance' : Balance,\n 'spender' : IDL.Principal,\n });\n const ApproveRequest = ApproveRequest_2;\n const BalanceRequest_2 = IDL.Record({\n 'token' : TokenIdentifier,\n 'user' : User,\n });\n const BalanceRequest = BalanceRequest_2;\n const Result_5 = IDL.Variant({ 'ok' : Balance, 'err' : CommonError_2 });\n const BalanceResponse_2 = Result_5;\n const BalanceResponse = BalanceResponse_2;\n const TokenIdentifier_2 = TokenIdentifier;\n const AccountIdentifier_3 = AccountIdentifier;\n const Result_4 = IDL.Variant({\n 'ok' : AccountIdentifier_3,\n 'err' : CommonError,\n });\n const Extension_2 = IDL.Text;\n const Extension = Extension_2;\n const TokenIndex_2 = IDL.Nat32;\n const TokenIndex = TokenIndex_2;\n const Metadata_2 = IDL.Variant({\n 'fungible' : IDL.Record({\n 'decimals' : IDL.Nat8,\n 'metadata' : IDL.Opt(IDL.Vec(IDL.Nat8)),\n 'name' : IDL.Text,\n 'symbol' : IDL.Text,\n }),\n 'nonfungible' : IDL.Record({ 'metadata' : IDL.Opt(IDL.Vec(IDL.Nat8)) }),\n });\n const Metadata = Metadata_2;\n const Result_3 = IDL.Variant({ 'ok' : Metadata, 'err' : CommonError });\n const MintRequest_2 = IDL.Record({\n 'to' : User,\n 'metadata' : IDL.Opt(IDL.Vec(IDL.Nat8)),\n });\n const MintRequest = MintRequest_2;\n const Memo = IDL.Vec(IDL.Nat8);\n const TransferRequest_2 = IDL.Record({\n 'to' : User,\n 'token' : TokenIdentifier,\n 'notify' : IDL.Bool,\n 'from' : User,\n 'memo' : Memo,\n 'subaccount' : IDL.Opt(SubAccount),\n 'amount' : Balance,\n });\n const TransferRequest = TransferRequest_2;\n const Result = IDL.Variant({\n 'ok' : Balance,\n 'err' : IDL.Variant({\n 'CannotNotify' : AccountIdentifier,\n 'InsufficientBalance' : IDL.Null,\n 'InvalidToken' : TokenIdentifier,\n 'Rejected' : IDL.Null,\n 'Unauthorized' : AccountIdentifier,\n 'Other' : IDL.Text,\n }),\n });\n const TransferResponse_2 = Result;\n const TransferResponse = TransferResponse_2;\n const erc721_token = IDL.Service({\n 'acceptCycles' : IDL.Func([], [], []),\n 'allowance' : IDL.Func([AllowanceRequest], [Result_2], ['query']),\n 'approve' : IDL.Func([ApproveRequest], [], []),\n 'availableCycles' : IDL.Func([], [IDL.Nat], ['query']),\n 'balance' : IDL.Func([BalanceRequest], [BalanceResponse], ['query']),\n 'bearer' : IDL.Func([TokenIdentifier_2], [Result_4], ['query']),\n 'extensions' : IDL.Func([], [IDL.Vec(Extension)], ['query']),\n 'getAllowances' : IDL.Func(\n [],\n [IDL.Vec(IDL.Tuple(TokenIndex, IDL.Principal))],\n ['query'],\n ),\n 'getMinter' : IDL.Func([], [IDL.Principal], ['query']),\n 'getRegistry' : IDL.Func(\n [],\n [IDL.Vec(IDL.Tuple(TokenIndex, AccountIdentifier_3))],\n ['query'],\n ),\n 'getTokens' : IDL.Func(\n [],\n [IDL.Vec(IDL.Tuple(TokenIndex, Metadata))],\n ['query'],\n ),\n 'metadata' : IDL.Func([TokenIdentifier_2], [Result_3], ['query']),\n 'mintNFT' : IDL.Func([MintRequest], [TokenIndex], []),\n 'setMinter' : IDL.Func([IDL.Principal], [], []),\n 'supply' : IDL.Func([TokenIdentifier_2], [Result_2], ['query']),\n 'transfer' : IDL.Func([TransferRequest], [TransferResponse], []),\n });\n return erc721_token;\n};\nexport const init = ({ IDL }) => { return [IDL.Principal]; };","/* global BigInt */\nimport { Actor, HttpAgent, Principal } from \"@dfinity/agent\"; \nimport { LEDGER_CANISTER_ID, GOVERNANCE_CANISTER_ID, NNS_CANISTER_ID, CYCLES_MINTING_CANISTER_ID, getCyclesTopupSubAccount, rosettaApi, principalToAccountIdentifier, toHexString, from32bits, to32bits, isHex, getSubAccountArray, fromHexString } from \"./utils.js\";\n\nimport ledgerIDL from './candid/ledger.did.js';\nimport governanceIDL from './candid/governance.did.js';\nimport nnsIDL from './candid/nns.did.js';\nimport hzldIDL from './candid/hzld.did.js'; //hardcode to hzld...\nimport extIDL from './candid/ext.did.js';\n//import advancedIDL from './candid/advanced.did.js';\n//import cronicsIDL from './candid/cronics.did.js';\n\nconst constructUser = (u) => {\n if (isHex(u) && u.length === 64) {\n return { 'address' : u };\n } else {\n return { 'principal' : Principal.fromText(u) };\n };\n};\nconst tokenIdentifier = (principal, index) => {\n const padding = Buffer(\"\\x0Atid\");\n const array = new Uint8Array([\n ...padding,\n ...Principal.fromText(principal).toBlob(),\n ...to32bits(index),\n ]);\n return Principal.fromBlob(array).toText();\n};\nconst decodeTokenId = (tid) => {\n var p = [...Principal.fromText(tid).toBlob()];\n var padding = p.splice(0, 4);\n if (toHexString(padding) !== toHexString(Buffer(\"\\x0Atid\"))) {\n return {\n index : 0,\n canister : tid,\n token : tokenIdentifier(tid, 0)\n };\n } else {\n return {\n index : from32bits(p.splice(-4)), \n canister : Principal.fromBlob(p).toText(),\n token : tid\n };\n }\n};\n\n//Preload IDLS against a common name\nconst _preloadedIdls = {\n 'governance' : governanceIDL,\n 'ledger' : ledgerIDL,\n 'hzld' : hzldIDL,\n 'nns' : nnsIDL,\n 'ext' : extIDL,\n 'default' : extIDL,\n};\n\nclass ExtConnection {\n //map known canisters to preloaded IDLs\n _mapIdls = {\n [LEDGER_CANISTER_ID] : _preloadedIdls['ledger'],\n [GOVERNANCE_CANISTER_ID] : _preloadedIdls['governance'],\n [NNS_CANISTER_ID] : _preloadedIdls['nns'],\n \"qz7gu-giaaa-aaaaf-qaaka-cai\" : _preloadedIdls['hzld'],\n //\"e3izy-jiaaa-aaaah-qacbq-cai\" : cronicsIDL,\n //\"kxh4l-cyaaa-aaaah-qadaq-cai\" : advancedIDL,\n };\n _metadata = {\n [LEDGER_CANISTER_ID] : {\n name : \"ICP\",\n symbol : \"ICP\",\n decimals : 8,\n type : 'fungible',\n },\n \"qz7gu-giaaa-aaaaf-qaaka-cai\" : {\n name : \"HZLD\",\n symbol : \"HZLD\",\n decimals : 0,\n type : 'fungible',\n },\n };\n _identity = false;//new AnonymousIdentity();\n _host = false;\n _agent = false;\n _canisters = {};\n \n constructor(host, identity) {\n if (identity) this._identity = identity;\n if (host) this._host = host;\n this._makeAgent();\n }\n idl(canister, idl) {\n //Map a canister to a preloaded idl\n this._mapIdls[canister] = idl;\n };\n setIdentity(identity) {\n if (identity) this._identity = identity;\n else this._identity = false;\n this._makeAgent();\n return this;\n }\n setHost(host) {\n if (host) this._host = host;\n else this._host = false;\n this._makeAgent();\n return this;\n }\n canister(cid, idl) {\n if (!idl){\n if (this._mapIdls.hasOwnProperty(cid)) {\n idl = this._mapIdls[cid];\n } else {\n //Resort to default IDLS\n //todo: Look into loading IDLs on the fly\n idl = _preloadedIdls['default'];\n }\n } else if (typeof idl == 'string') {\n if (_preloadedIdls.hasOwnProperty(idl)) {\n idl = _preloadedIdls[idl];\n } else {\n throw new Error(idl + \" is not a preloaded IDL\");\n }\n }\n if (!this._canisters.hasOwnProperty(cid)){\n this._canisters[cid] = Actor.createActor(idl, {agent : this._agent, canisterId : cid});\n }\n return this._canisters[cid];\n }\n token(tid, idl) {\n if (!tid) tid = LEDGER_CANISTER_ID;//defaults to ledger\n var tokenObj = decodeTokenId(tid);\n if (!idl) {\n if (this._mapIdls.hasOwnProperty(tokenObj.canister)) idl = this._mapIdls[tokenObj.canister];\n else idl = _preloadedIdls['ext']; //ext is our token default...\n }\n console.log(tokenObj.canister)\n // console.log(idl);\n var api = this.canister(tokenObj.canister, idl);\n return {\n call : api,\n fee : () => {\n return new Promise((resolve, reject) => {\n switch(tokenObj.canister) {\n case LEDGER_CANISTER_ID:\n resolve(10000);\n break;\n case \"qz7gu-giaaa-aaaaf-qaaka-cai\":\n resolve(1);\n break;\n default:\n //TODO compute fees\n resolve(0);\n break;\n }\n });\n },\n getMetadata : () => {\n return new Promise((resolve, reject) => {\n if (this._metadata.hasOwnProperty(tokenObj.canister)) {\n resolve(this._metadata[tokenObj.canister]);\n } else {\n switch(tokenObj.canister) {\n default:\n api.metadata(tokenObj.token).then(r => {\n if (typeof r.ok != 'undefined') {\n if (typeof r.ok.fungible != 'undefined') {\n resolve({\n name : r.ok.fungible.name,\n symbol : r.ok.fungible.symbol,\n decimals : r.ok.fungible.decimals,\n metadata : r.ok.fungible.metadata,\n type : 'fungible'\n });\n } else {\n resolve({\n metadata : r.ok.nonfungible.metadata,\n type : 'nonfungible'\n });\n }\n } else if (typeof r.err != 'undefined') reject(r.err)\n else reject(r);\n }).catch(reject);\n break;\n }\n }\n });\n },\n getBearer : () => {\n return new Promise((resolve, reject) => {\n api.bearer(tokenObj.token).then(r => {\n if (typeof r.ok != 'undefined') resolve(r.ok)\n else if (typeof r.err != 'undefined') reject(r.err)\n else reject(r);\n }).catch(reject); \n });\n },\n getBalance : (address, princpal) => {\n return new Promise((resolve, reject) => {\n var args;\n switch(tokenObj.canister) {\n case LEDGER_CANISTER_ID:\n rosettaApi.getAccountBalance(address).then(b => { \n resolve(b)\n });\n break;\n case \"qz7gu-giaaa-aaaaf-qaaka-cai\":\n args = {\n \"user\" : Principal.fromText(princpal)\n };\n api.getBalanceInsecure(args).then(b => {\n var bal = b.length === 0 ? 0 : b[0];\n resolve(bal);\n }).catch(reject);\n break;\n default:\n args = {\n \"user\" : constructUser(address),\n 'token' : tokenObj.token\n };\n api.balance(args).then(r => {\n if (typeof r.ok != 'undefined') resolve(r.ok)\n else if (typeof r.err != 'undefined') reject(r.err)\n else reject(r);\n }).catch(reject); \n break;\n }\n });\n },\n getTransactions : (address, princpal) => {\n return new Promise((resolve, reject) => {\n switch(tokenObj.canister) {\n case LEDGER_CANISTER_ID:\n rosettaApi.getTransactionsByAccount(address).then(ts => { \n if (!Array.isArray(ts)) resolve([]);\n var _ts = [];\n ts.map(_t => {\n if (_t.type !== \"TRANSACTION\") return false;\n if (_t.status !== \"COMPLETED\") return false;\n _ts.push({\n from : _t.account1Address,\n to : _t.account2Address,\n amount : Number(_t.amount/100000000),\n fee : Number(_t.fee/100000000),\n hash : _t.hash,\n timestamp : _t.timestamp,\n memo : Number(_t.memo),\n });\n return true;\n });\n _ts.reverse();\n resolve(_ts);\n }).catch(reject);\n break;\n case \"qz7gu-giaaa-aaaaf-qaaka-cai\":\n default:\n resolve([]); \n break;\n }\n });\n },\n /*\n from_principal = principal of account as text\n from_sa = subaccount (to produce hex address). null/0 default as number\n to_user = valid User (address or principal) as text\n amount = valid amount as BigInt\n fee = valid fee as BigInt\n memo = data to be sent as text/hex/number\n notify = if we need to notify TODO\n */\n transfer : (from_principal, from_sa, to_user, amount, fee, memo, notify) => {\n return new Promise((resolve, reject) => {\n var args;\n switch(tokenObj.canister) {\n case LEDGER_CANISTER_ID:\n args = {\n \"from_subaccount\" : [getSubAccountArray(from_sa ?? 0)], \n \"to\" : to_user, //Should be an address\n \"amount\" : { \"e8s\" : amount },\n \"fee\" : { \"e8s\" : fee }, \n \"memo\" : memo ? Number(BigInt(memo)) : 0, \n \"created_at_time\" : []\n };\n alert(api.send_dfx.toString())\n api.send_dfx(args).then(bh => {\n resolve(true);\n }).catch(reject);\n //Notify here\n break;\n case \"qz7gu-giaaa-aaaaf-qaaka-cai\":\n args = {\n \"to\" : Principal.fromText(to_user), \n \"metadata\" : [],\n \"from\" : Principal.fromText(from_principal),\n \"amount\" : amount\n };\n api.transfer(args).then(b => {\n if (typeof b.ok != 'undefined') { \n resolve(true);\n } else {\n reject(JSON.stringify(b.err));\n }\n }).catch(reject);\n break;\n default:\n args = {\n 'token' : tid,\n 'from' : { 'address' : principalToAccountIdentifier(from_principal, from_sa ?? 0) },\n 'subaccount' : [getSubAccountArray(from_sa ?? 0)],\n 'to' : constructUser(to_user),\n 'amount' : amount,\n 'fee' : fee,\n 'memo' : fromHexString(memo),\n 'notify' : notify\n };\n api.transfer(args).then(b => {\n if (typeof b.ok != 'undefined') {\n resolve(true);\n } else {\n reject(JSON.stringify(b.err));\n }\n }).catch(reject);\n break;\n }\n });\n },\n mintCycles : (from_principal, from_sa, canister, amount, fee) => {\n return new Promise((resolve, reject) => {\n switch(tokenObj.canister) {\n case LEDGER_CANISTER_ID:\n var _to_sub = getCyclesTopupSubAccount(canister);\n var _to = principalToAccountIdentifier(CYCLES_MINTING_CANISTER_ID, _to_sub);\n var args = {\n \"from_subaccount\" : [getSubAccountArray(from_sa ?? 0)], \n \"to\" : _to, \n \"fee\" : { \"e8s\" : fee }, \n \"memo\" : Number(BigInt(\"0x50555054\")), \n \"created_at_time\" : [], \n \"amount\" : { \"e8s\" : amount }\n };\n api.send_dfx(args).then(block => {\n var args = {\n \"block_height\" : block,\n \"max_fee\": {e8s: fee},\n \"from_subaccount\": [getSubAccountArray(from_sa ?? 0)],\n \"to_subaccount\": [getSubAccountArray(_to_sub)],\n \"to_canister\": Principal.fromText(CYCLES_MINTING_CANISTER_ID)\n };\n api.notify_dfx(args).then(resolve).catch(reject);\n }).catch(reject);\n break;\n case \"5ymop-yyaaa-aaaah-qaa4q-cai\":\n reject(\"WIP\");\n break;\n default:\n reject(\"Cycle topup is not supported by this token\");\n break;\n }\n });\n }\n };\n }\n \n _makeAgent() {\n var args = {};\n if (this._identity) args['identity'] = this._identity;\n if (this._host) args['host'] = this._host;\n this._agent = new HttpAgent(args);\n };\n};\n\nconst extjs = {\n connect : (host, identity) => new ExtConnection(host ?? \"https://boundary.ic0.app/\", identity),\n decodeTokenId : decodeTokenId,\n};\nexport default extjs;\n//window.extjs = extjs;\n//window.principalToAccountIdentifier = principalToAccountIdentifier;\n//window.fromHexString = fromHexString;","/**\n * @file RosettaApi\n * @copyright Copyright (c) 2018-2021 Dylan Miller and dfinityexplorer contributors\n * @license MIT License\n */\n\nimport axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport jsonBigint from 'json-bigint';\n\n// Set useNativeBigInt to true and use BigInt once BigInt is widely supported.\nconst JSONbig = jsonBigint({ strict: true });\n\n/**\n * Types of Rosetta API errors.\n */\nexport const RosettaErrorType = Object.freeze({\n NotFound: 0,\n Timeout: 1,\n NetworkError: 2\n});\n\n/**\n * Describes the cause of a Rosetta API error.\n */\nexport class RosettaError extends Error {\n /**\n * Create a RosettaError.\n * @param {String} message An error message describing the error.\n * @param {Number} status number The HTTP response status.\n */\n constructor(message, status) {\n super(message);\n switch (status) {\n case 408:\n this.errorType = RosettaErrorType.Timeout;\n break;\n case 500:\n this.errorType = RosettaErrorType.NotFound;\n break;\n default:\n this.errorType = RosettaErrorType.NetworkError;\n break;\n }\n }\n}\n\n/**\n * Contains information about a transaction.\n */\nexport class Transaction {\n /**\n * Create a Transaction.\n * @param {Any} rosettaTransaction The Rosetta Transaction object of the transaction.\n * @param {Number} blockIndex The index of the block containing the transaction.\n * milliseconds since the Unix Epoch.\n */\n constructor(rosettaTransaction, blockIndex) {\n this.blockIndex = blockIndex;\n this.hash = rosettaTransaction.transaction_identifier.hash;\n const timestampMs = rosettaTransaction.metadata.timestamp.div(1000000).toNumber();\n this.timestamp = new Date(timestampMs);\n const operations = rosettaTransaction.operations;\n if (operations.length >= 1) { \n this.type = operations[0].type;\n this.status = operations[0].status;\n this.account1Address = operations[0].account.address;\n this.amount = new BigNumber(operations[0].amount.value);\n // Negate amount for TRANSACTION and BURN, so that they appear in the UI as positive values.\n if ((operations[0].type === 'TRANSACTION' || operations[0].type === 'BURN') &&\n !this.amount.isZero()) {\n this.amount = this.amount.negated();\n }\n }\n else {\n this.type = '';\n this.status = '';\n this.account1Address = '';\n this.amount = new BigNumber(0);\n }\n if (operations.length >= 2 && operations[1].type === 'TRANSACTION')\n this.account2Address = operations[1].account.address;\n else\n this.account2Address = '';\n if (operations.length >= 3 && operations[2].type === 'FEE')\n this.fee = new BigNumber(-operations[2].amount.value);\n else\n this.fee = new BigNumber(0);\n this.memo = new BigNumber(rosettaTransaction.metadata.memo);\n }\n};\n\n/**\n * Manages Rosetta API calls.\n */\nexport default class RosettaApi {\n /**\n * Create a RosettaApi.\n */\n constructor() {\n this.axios = axios.create({\n baseURL: 'https://rosetta-api.internetcomputer.org/',\n method: 'post',\n transformRequest: (data) => JSONbig.stringify(data),\n transformResponse: (data) => JSONbig.parse(data),\n headers: { 'Content-Type': 'application/json;charset=utf-8' }\n });\n\n this.networkIdentifier = this.networksList().then(res =>\n res.network_identifiers.find(\n networkIdentifier => networkIdentifier.blockchain === 'Internet Computer'\n )\n );\n }\n\n /**\n * Return the ICP account balance of the specified account.\n * @param {string} accountAddress The account address to get the ICP balance of.\n * @returns {Promise} The ICP account balance of the specified account, or\n * a RosettaError for error.\n */\n async getAccountBalance(accountAddress) {\n try {\n const response = await this.accountBalanceByAddress(accountAddress);\n return new BigNumber(response.balances[0].value);\n }\n catch (error) {\n //console.log(error);\n return new RosettaError(\n error.message, axios.isAxiosError(error) ? error?.response?.status : undefined);\n }\n }\n\n /**\n * Return the latest block index.\n * @returns {Promise} The latest block index, or a RosettaError for error.\n */\n async getLastBlockIndex() {\n try {\n const response = await this.networkStatus();\n return response.current_block_identifier.index;\n }\n catch (error) {\n //console.log(error);\n return new RosettaError(\n error.message, axios.isAxiosError(error) ? error?.response?.status : undefined);\n }\n }\n\n /**\n * Return the Transaction object with the specified hash.\n * @param {string} transactionHash The hash of the transaction to return.\n * @returns {Transaction|null} The Transaction object with the specified hash, or a RosettaError\n * for error.\n */\n async getTransaction(transactionHash) {\n try {\n const responseTransactions = await this.transactionsByHash(transactionHash);\n if (responseTransactions.transactions.length === 0)\n return new RosettaError('Transaction not found.', 500);\n\n return new Transaction(\n responseTransactions.transactions[0].transaction,\n responseTransactions.transactions[0].block_identifier.index);\n }\n catch (error) {\n //console.log(error);\n return new RosettaError(\n error.message, axios.isAxiosError(error) ? error?.response?.status : undefined);\n }\n }\n\n /**\n * Return an array of Transaction objects based on the specified parameters, or an empty array if\n * none found.\n * @param limit {number} The maximum number of transactions to return in one call.\n * @param maxBlockIndex {number} The block index to start at. If not specified, start at current\n * block.\n * @param offset {number} The offset from maxBlockIndex to start returning transactions.\n * @returns {Promise|null>} An array of Transaction objects, or a RosettaError\n * for error.\n */\n async getTransactions(limit, maxBlockIndex, offset) {\n try {\n // This function can be simplified once /search/transactions supports using the properties\n // max_block, offset, and limit.\n let blockIndex;\n if (maxBlockIndex)\n blockIndex = maxBlockIndex;\n else {\n // Get the latest block index.\n const response = await this.networkStatus();\n blockIndex = response.current_block_identifier.index;\n }\n if (offset)\n blockIndex = Math.max(blockIndex - offset, -1);\n const transactionCount = Math.min(limit, blockIndex + 1);\n const transactions = [];\n for (let i = 0; i < transactionCount; i++)\n transactions.push(await this.getTransactionByBlock(blockIndex - i));\n return transactions;\n }\n catch (error) {\n //console.log(error);\n return new RosettaError(\n error.message, axios.isAxiosError(error) ? error?.response?.status : undefined);\n }\n }\n\n /**\n * Return an array of Transaction objects based on the specified parameters, or an empty array if\n * none found.\n * @param {string} accountAddress The account address to get the transactions of.\n * @returns {Promise|null>} An array of Transaction objects, or a RosettaError\n * for error.\n */\n async getTransactionsByAccount(accountAddress) {\n try {\n const response = await this.transactionsByAccount(accountAddress);\n const transactions = await Promise.all(\n response.transactions.map((blockTransaction) => {\n return new Transaction(\n blockTransaction.transaction, blockTransaction.block_identifier.index);\n })\n );\n return transactions.reverse();\n }\n catch (error) {\n //console.log(error);\n return new RosettaError(\n error.message, axios.isAxiosError(error) ? error?.response?.status : undefined);\n }\n }\n\n /**\n * Return the Transaction corresponding to the specified block index (i.e., block height).\n * @param {number} blockIndex The index of the block to return the Transaction for.\n * @returns {Promise} The Transaction corresponding to the specified block index.\n * @private\n */\n async getTransactionByBlock(blockIndex) {\n const response = await this.blockByIndex(blockIndex);\n return new Transaction(response.block.transactions[0], blockIndex);\n }\n\n /**\n * Perform the specified http request and return the response data.\n * @param {string} url The server URL that will be used for the request.\n * @param {object} data The data to be sent as the request body.\n * @returns {Promise} The response body that was provided by the server.\n * @private\n */\n async request(url, data) {\n return (await this.axios.request({ url: url, data: data })).data;\n }\n\n /**\n * Return the /network/list response, containing a list of NetworkIdentifiers that the Rosetta\n * server supports.\n * @returns {Promise} The response body that was provided by the server.\n * @private\n */\n networksList() {\n return this.request('/network/list', {});\n }\n\n /**\n * Return /network/status response, describing the current status of the network.\n * @returns {Promise} The response body that was provided by the server.\n * @private\n */\n async networkStatus() {\n const networkIdentifier = await this.networkIdentifier;\n return this.request(\n '/network/status', {\n network_identifier: networkIdentifier\n }\n );\n }\n\n /**\n * Return the /account/balance response for the specified account.\n * @param {string} accountAddress The account address to get the balance of.\n * @returns {Promise} The response body that was provided by the server.\n * @private\n */\n async accountBalanceByAddress(accountAddress) {\n const networkIdentifier = await this.networkIdentifier;\n return this.request(\n '/account/balance', {\n network_identifier: networkIdentifier,\n account_identifier: {address: accountAddress}\n }\n );\n }\n\n /**\n * Return the /block response for the block corresponding to the specified block index (i.e.,\n * block height).\n * @param {number} blockIndex The index of the block to return.\n * @returns {Promise} The response body that was provided by the server.\n * @private\n */\n async blockByIndex(blockIndex) {\n const networkIdentifier = await this.networkIdentifier;\n return this.request(\n '/block', {\n network_identifier: networkIdentifier,\n block_identifier: {index: blockIndex}\n }\n );\n }\n\n /**\n * Return the /search/transactions response for transactions containing an operation that affects\n * the specified account.\n * @param {string} accountAddress The account address to get the transactions of.\n * @returns {Promise} The response body that was provided by the server.\n * @private\n */\n async transactionsByAccount(accountAddress) {\n const networkIdentifier = await this.networkIdentifier;\n return this.request(\n '/search/transactions', {\n network_identifier: networkIdentifier,\n account_identifier: {address: accountAddress}\n }\n );\n }\n\n /**\n * Return the /search/transactions response for transactions (only one) with the specified hash.\n * @param {string} transactionHash The hash of the transaction to return.\n * @returns {Promise} The response body that was provided by the server.\n * @private\n */\n async transactionsByHash(transactionHash) {\n const networkIdentifier = await this.networkIdentifier;\n return this.request(\n '/search/transactions', {\n network_identifier: networkIdentifier,\n transaction_identifier: {hash: transactionHash}\n }\n );\n }\n}","export default ({ IDL }) => {\n const AccountIdentifier = IDL.Text;\n const Duration = IDL.Record({ 'secs' : IDL.Nat64, 'nanos' : IDL.Nat32 });\n const ArchiveOptions = IDL.Record({\n 'max_message_size_bytes' : IDL.Opt(IDL.Nat32),\n 'node_max_memory_size_bytes' : IDL.Opt(IDL.Nat32),\n 'controller_id' : IDL.Principal,\n });\n const ICPTs = IDL.Record({ 'e8s' : IDL.Nat64 });\n const LedgerCanisterInitPayload = IDL.Record({\n 'send_whitelist' : IDL.Vec(IDL.Tuple(IDL.Principal)),\n 'minting_account' : AccountIdentifier,\n 'transaction_window' : IDL.Opt(Duration),\n 'max_message_size_bytes' : IDL.Opt(IDL.Nat32),\n 'archive_options' : IDL.Opt(ArchiveOptions),\n 'initial_values' : IDL.Vec(IDL.Tuple(AccountIdentifier, ICPTs)),\n });\n const AccountBalanceArgs = IDL.Record({ 'account' : AccountIdentifier });\n const SubAccount = IDL.Vec(IDL.Nat8);\n const BlockHeight = IDL.Nat64;\n const NotifyCanisterArgs = IDL.Record({\n 'to_subaccount' : IDL.Opt(SubAccount),\n 'from_subaccount' : IDL.Opt(SubAccount),\n 'to_canister' : IDL.Principal,\n 'max_fee' : ICPTs,\n 'block_height' : BlockHeight,\n });\n const Memo = IDL.Nat64;\n const TimeStamp = IDL.Record({ 'timestamp_nanos' : IDL.Nat64 });\n const SendArgs = IDL.Record({\n 'to' : AccountIdentifier,\n 'fee' : ICPTs,\n 'memo' : Memo,\n 'from_subaccount' : IDL.Opt(SubAccount),\n 'created_at_time' : IDL.Opt(TimeStamp),\n 'amount' : ICPTs,\n });\n return IDL.Service({\n 'account_balance_dfx' : IDL.Func([AccountBalanceArgs], [ICPTs], ['query']),\n 'notify_dfx' : IDL.Func([NotifyCanisterArgs], [], []),\n 'send_dfx' : IDL.Func([SendArgs], [BlockHeight], []),\n });\n};\nexport const init = ({ IDL }) => {\n const AccountIdentifier = IDL.Text;\n const Duration = IDL.Record({ 'secs' : IDL.Nat64, 'nanos' : IDL.Nat32 });\n const ArchiveOptions = IDL.Record({\n 'max_message_size_bytes' : IDL.Opt(IDL.Nat32),\n 'node_max_memory_size_bytes' : IDL.Opt(IDL.Nat32),\n 'controller_id' : IDL.Principal,\n });\n const ICPTs = IDL.Record({ 'e8s' : IDL.Nat64 });\n const LedgerCanisterInitPayload = IDL.Record({\n 'send_whitelist' : IDL.Vec(IDL.Tuple(IDL.Principal)),\n 'minting_account' : AccountIdentifier,\n 'transaction_window' : IDL.Opt(Duration),\n 'max_message_size_bytes' : IDL.Opt(IDL.Nat32),\n 'archive_options' : IDL.Opt(ArchiveOptions),\n 'initial_values' : IDL.Vec(IDL.Tuple(AccountIdentifier, ICPTs)),\n });\n return [LedgerCanisterInitPayload];\n};","export default ({ IDL }) => {\n const Proposal = IDL.Rec();\n const NeuronId = IDL.Record({ 'id' : IDL.Nat64 });\n const Followees = IDL.Record({ 'followees' : IDL.Vec(NeuronId) });\n const NodeProvider = IDL.Record({ 'id' : IDL.Opt(IDL.Principal) });\n const NetworkEconomics = IDL.Record({\n 'neuron_minimum_stake_e8s' : IDL.Nat64,\n 'max_proposals_to_keep_per_topic' : IDL.Nat32,\n 'neuron_management_fee_per_proposal_e8s' : IDL.Nat64,\n 'reject_cost_e8s' : IDL.Nat64,\n 'transaction_fee_e8s' : IDL.Nat64,\n 'neuron_spawn_dissolve_delay_seconds' : IDL.Nat64,\n 'minimum_icp_xdr_rate' : IDL.Nat64,\n 'maximum_node_provider_rewards_e8s' : IDL.Nat64,\n });\n const RewardEvent = IDL.Record({\n 'day_after_genesis' : IDL.Nat64,\n 'actual_timestamp_seconds' : IDL.Nat64,\n 'distributed_e8s_equivalent' : IDL.Nat64,\n 'settled_proposals' : IDL.Vec(NeuronId),\n });\n const NeuronStakeTransfer = IDL.Record({\n 'to_subaccount' : IDL.Vec(IDL.Nat8),\n 'neuron_stake_e8s' : IDL.Nat64,\n 'from' : IDL.Opt(IDL.Principal),\n 'memo' : IDL.Nat64,\n 'from_subaccount' : IDL.Vec(IDL.Nat8),\n 'transfer_timestamp' : IDL.Nat64,\n 'block_height' : IDL.Nat64,\n });\n const GovernanceError = IDL.Record({\n 'error_message' : IDL.Text,\n 'error_type' : IDL.Int32,\n });\n const Ballot = IDL.Record({ 'vote' : IDL.Int32, 'voting_power' : IDL.Nat64 });\n const Tally = IDL.Record({\n 'no' : IDL.Nat64,\n 'yes' : IDL.Nat64,\n 'total' : IDL.Nat64,\n 'timestamp_seconds' : IDL.Nat64,\n });\n const Spawn = IDL.Record({ 'new_controller' : IDL.Opt(IDL.Principal) });\n const Split = IDL.Record({ 'amount_e8s' : IDL.Nat64 });\n const Follow = IDL.Record({\n 'topic' : IDL.Int32,\n 'followees' : IDL.Vec(NeuronId),\n });\n const RemoveHotKey = IDL.Record({\n 'hot_key_to_remove' : IDL.Opt(IDL.Principal),\n });\n const AddHotKey = IDL.Record({ 'new_hot_key' : IDL.Opt(IDL.Principal) });\n const IncreaseDissolveDelay = IDL.Record({\n 'additional_dissolve_delay_seconds' : IDL.Nat32,\n });\n const SetDissolveTimestamp = IDL.Record({\n 'dissolve_timestamp_seconds' : IDL.Nat64,\n });\n const Operation = IDL.Variant({\n 'RemoveHotKey' : RemoveHotKey,\n 'AddHotKey' : AddHotKey,\n 'StopDissolving' : IDL.Record({}),\n 'StartDissolving' : IDL.Record({}),\n 'IncreaseDissolveDelay' : IncreaseDissolveDelay,\n 'SetDissolveTimestamp' : SetDissolveTimestamp,\n });\n const Configure = IDL.Record({ 'operation' : IDL.Opt(Operation) });\n const RegisterVote = IDL.Record({\n 'vote' : IDL.Int32,\n 'proposal' : IDL.Opt(NeuronId),\n });\n const DisburseToNeuron = IDL.Record({\n 'dissolve_delay_seconds' : IDL.Nat64,\n 'kyc_verified' : IDL.Bool,\n 'amount_e8s' : IDL.Nat64,\n 'new_controller' : IDL.Opt(IDL.Principal),\n 'nonce' : IDL.Nat64,\n });\n const AccountIdentifier = IDL.Record({ 'hash' : IDL.Vec(IDL.Nat8) });\n const Amount = IDL.Record({ 'e8s' : IDL.Nat64 });\n const Disburse = IDL.Record({\n 'to_account' : IDL.Opt(AccountIdentifier),\n 'amount' : IDL.Opt(Amount),\n });\n const Command = IDL.Variant({\n 'Spawn' : Spawn,\n 'Split' : Split,\n 'Follow' : Follow,\n 'Configure' : Configure,\n 'RegisterVote' : RegisterVote,\n 'DisburseToNeuron' : DisburseToNeuron,\n 'MakeProposal' : Proposal,\n 'Disburse' : Disburse,\n });\n const ManageNeuron = IDL.Record({\n 'id' : IDL.Opt(NeuronId),\n 'command' : IDL.Opt(Command),\n });\n const ExecuteNnsFunction = IDL.Record({\n 'nns_function' : IDL.Int32,\n 'payload' : IDL.Vec(IDL.Nat8),\n });\n const RewardToNeuron = IDL.Record({ 'dissolve_delay_seconds' : IDL.Nat64 });\n const RewardToAccount = IDL.Record({\n 'to_account' : IDL.Opt(AccountIdentifier),\n });\n const RewardMode = IDL.Variant({\n 'RewardToNeuron' : RewardToNeuron,\n 'RewardToAccount' : RewardToAccount,\n });\n const RewardNodeProvider = IDL.Record({\n 'node_provider' : IDL.Opt(NodeProvider),\n 'reward_mode' : IDL.Opt(RewardMode),\n 'amount_e8s' : IDL.Nat64,\n });\n const SetDefaultFollowees = IDL.Record({\n 'default_followees' : IDL.Vec(IDL.Tuple(IDL.Int32, Followees)),\n });\n const ApproveGenesisKyc = IDL.Record({\n 'principals' : IDL.Vec(IDL.Principal),\n });\n const Change = IDL.Variant({\n 'ToRemove' : NodeProvider,\n 'ToAdd' : NodeProvider,\n });\n const AddOrRemoveNodeProvider = IDL.Record({ 'change' : IDL.Opt(Change) });\n const Motion = IDL.Record({ 'motion_text' : IDL.Text });\n const Action = IDL.Variant({\n 'ManageNeuron' : ManageNeuron,\n 'ExecuteNnsFunction' : ExecuteNnsFunction,\n 'RewardNodeProvider' : RewardNodeProvider,\n 'SetDefaultFollowees' : SetDefaultFollowees,\n 'ManageNetworkEconomics' : NetworkEconomics,\n 'ApproveGenesisKyc' : ApproveGenesisKyc,\n 'AddOrRemoveNodeProvider' : AddOrRemoveNodeProvider,\n 'Motion' : Motion,\n });\n Proposal.fill(\n IDL.Record({\n 'url' : IDL.Text,\n 'action' : IDL.Opt(Action),\n 'summary' : IDL.Text,\n })\n );\n const ProposalData = IDL.Record({\n 'id' : IDL.Opt(NeuronId),\n 'failure_reason' : IDL.Opt(GovernanceError),\n 'ballots' : IDL.Vec(IDL.Tuple(IDL.Nat64, Ballot)),\n 'proposal_timestamp_seconds' : IDL.Nat64,\n 'reward_event_round' : IDL.Nat64,\n 'failed_timestamp_seconds' : IDL.Nat64,\n 'reject_cost_e8s' : IDL.Nat64,\n 'latest_tally' : IDL.Opt(Tally),\n 'decided_timestamp_seconds' : IDL.Nat64,\n 'proposal' : IDL.Opt(Proposal),\n 'proposer' : IDL.Opt(NeuronId),\n 'executed_timestamp_seconds' : IDL.Nat64,\n });\n const ClaimOrRefreshNeuronFromAccount = IDL.Record({\n 'controller' : IDL.Opt(IDL.Principal),\n 'memo' : IDL.Nat64,\n });\n const Command_2 = IDL.Variant({\n 'Spawn' : Spawn,\n 'Split' : Split,\n 'ClaimOrRefresh' : ClaimOrRefreshNeuronFromAccount,\n 'DisburseToNeuron' : DisburseToNeuron,\n 'Disburse' : Disburse,\n });\n const NeuronInFlightCommand = IDL.Record({\n 'command' : IDL.Opt(Command_2),\n 'timestamp' : IDL.Nat64,\n });\n const BallotInfo = IDL.Record({\n 'vote' : IDL.Int32,\n 'proposal_id' : IDL.Opt(NeuronId),\n });\n const DissolveState = IDL.Variant({\n 'DissolveDelaySeconds' : IDL.Nat64,\n 'WhenDissolvedTimestampSeconds' : IDL.Nat64,\n });\n const Neuron = IDL.Record({\n 'id' : IDL.Opt(NeuronId),\n 'controller' : IDL.Opt(IDL.Principal),\n 'recent_ballots' : IDL.Vec(BallotInfo),\n 'kyc_verified' : IDL.Bool,\n 'not_for_profit' : IDL.Bool,\n 'maturity_e8s_equivalent' : IDL.Nat64,\n 'cached_neuron_stake_e8s' : IDL.Nat64,\n 'created_timestamp_seconds' : IDL.Nat64,\n 'aging_since_timestamp_seconds' : IDL.Nat64,\n 'hot_keys' : IDL.Vec(IDL.Principal),\n 'account' : IDL.Vec(IDL.Nat8),\n 'dissolve_state' : IDL.Opt(DissolveState),\n 'followees' : IDL.Vec(IDL.Tuple(IDL.Int32, Followees)),\n 'neuron_fees_e8s' : IDL.Nat64,\n 'transfer' : IDL.Opt(NeuronStakeTransfer),\n });\n const Governance = IDL.Record({\n 'default_followees' : IDL.Vec(IDL.Tuple(IDL.Int32, Followees)),\n 'wait_for_quiet_threshold_seconds' : IDL.Nat64,\n 'node_providers' : IDL.Vec(NodeProvider),\n 'economics' : IDL.Opt(NetworkEconomics),\n 'latest_reward_event' : IDL.Opt(RewardEvent),\n 'to_claim_transfers' : IDL.Vec(NeuronStakeTransfer),\n 'short_voting_period_seconds' : IDL.Nat64,\n 'proposals' : IDL.Vec(IDL.Tuple(IDL.Nat64, ProposalData)),\n 'in_flight_commands' : IDL.Vec(IDL.Tuple(IDL.Nat64, NeuronInFlightCommand)),\n 'neurons' : IDL.Vec(IDL.Tuple(IDL.Nat64, Neuron)),\n 'genesis_timestamp_seconds' : IDL.Nat64,\n });\n const Result = IDL.Variant({ 'Ok' : IDL.Null, 'Err' : GovernanceError });\n const Result_1 = IDL.Variant({\n 'Error' : GovernanceError,\n 'NeuronId' : NeuronId,\n });\n const ClaimOrRefreshNeuronFromAccountResponse = IDL.Record({\n 'result' : IDL.Opt(Result_1),\n });\n const Result_2 = IDL.Variant({ 'Ok' : Neuron, 'Err' : GovernanceError });\n const NeuronInfo = IDL.Record({\n 'dissolve_delay_seconds' : IDL.Nat64,\n 'recent_ballots' : IDL.Vec(BallotInfo),\n 'created_timestamp_seconds' : IDL.Nat64,\n 'state' : IDL.Int32,\n 'retrieved_at_timestamp_seconds' : IDL.Nat64,\n 'voting_power' : IDL.Nat64,\n 'age_seconds' : IDL.Nat64,\n });\n const Result_3 = IDL.Variant({ 'Ok' : NeuronInfo, 'Err' : GovernanceError });\n const ProposalInfo = IDL.Record({\n 'id' : IDL.Opt(NeuronId),\n 'status' : IDL.Int32,\n 'topic' : IDL.Int32,\n 'failure_reason' : IDL.Opt(GovernanceError),\n 'ballots' : IDL.Vec(IDL.Tuple(IDL.Nat64, Ballot)),\n 'proposal_timestamp_seconds' : IDL.Nat64,\n 'reward_event_round' : IDL.Nat64,\n 'failed_timestamp_seconds' : IDL.Nat64,\n 'reject_cost_e8s' : IDL.Nat64,\n 'latest_tally' : IDL.Opt(Tally),\n 'reward_status' : IDL.Int32,\n 'decided_timestamp_seconds' : IDL.Nat64,\n 'proposal' : IDL.Opt(Proposal),\n 'proposer' : IDL.Opt(NeuronId),\n 'executed_timestamp_seconds' : IDL.Nat64,\n });\n const ListNeurons = IDL.Record({\n 'neuron_ids' : IDL.Vec(IDL.Nat64),\n 'include_neurons_readable_by_caller' : IDL.Bool,\n });\n const ListNeuronsResponse = IDL.Record({\n 'neuron_infos' : IDL.Vec(IDL.Tuple(IDL.Nat64, NeuronInfo)),\n 'full_neurons' : IDL.Vec(Neuron),\n });\n const ListProposalInfo = IDL.Record({\n 'include_reward_status' : IDL.Vec(IDL.Int32),\n 'before_proposal' : IDL.Opt(NeuronId),\n 'limit' : IDL.Nat32,\n 'exclude_topic' : IDL.Vec(IDL.Int32),\n 'include_status' : IDL.Vec(IDL.Int32),\n });\n const ListProposalInfoResponse = IDL.Record({\n 'proposal_info' : IDL.Vec(ProposalInfo),\n });\n const SpawnResponse = IDL.Record({ 'created_neuron_id' : IDL.Opt(NeuronId) });\n const MakeProposalResponse = IDL.Record({\n 'proposal_id' : IDL.Opt(NeuronId),\n });\n const DisburseResponse = IDL.Record({ 'transfer_block_height' : IDL.Nat64 });\n const Command_1 = IDL.Variant({\n 'Error' : GovernanceError,\n 'Spawn' : SpawnResponse,\n 'Split' : SpawnResponse,\n 'Follow' : IDL.Record({}),\n 'Configure' : IDL.Record({}),\n 'RegisterVote' : IDL.Record({}),\n 'DisburseToNeuron' : SpawnResponse,\n 'MakeProposal' : MakeProposalResponse,\n 'Disburse' : DisburseResponse,\n });\n const ManageNeuronResponse = IDL.Record({ 'command' : IDL.Opt(Command_1) });\n return IDL.Service({\n 'claim_gtc_neurons' : IDL.Func(\n [IDL.Principal, IDL.Vec(NeuronId)],\n [Result],\n [],\n ),\n 'claim_or_refresh_neuron_from_account' : IDL.Func(\n [ClaimOrRefreshNeuronFromAccount],\n [ClaimOrRefreshNeuronFromAccountResponse],\n [],\n ),\n 'get_full_neuron' : IDL.Func([IDL.Nat64], [Result_2], ['query']),\n 'get_neuron_ids' : IDL.Func([], [IDL.Vec(IDL.Nat64)], ['query']),\n 'get_neuron_info' : IDL.Func([IDL.Nat64], [Result_3], ['query']),\n 'get_pending_proposals' : IDL.Func([], [IDL.Vec(ProposalInfo)], ['query']),\n 'get_proposal_info' : IDL.Func(\n [IDL.Nat64],\n [IDL.Opt(ProposalInfo)],\n ['query'],\n ),\n 'list_neurons' : IDL.Func([ListNeurons], [ListNeuronsResponse], ['query']),\n 'list_proposals' : IDL.Func(\n [ListProposalInfo],\n [ListProposalInfoResponse],\n ['query'],\n ),\n 'manage_neuron' : IDL.Func([ManageNeuron], [ManageNeuronResponse], []),\n 'transfer_gtc_neuron' : IDL.Func([NeuronId, NeuronId], [Result], []),\n });\n};\nexport const init = ({ IDL }) => {\n const Proposal = IDL.Rec();\n const NeuronId = IDL.Record({ 'id' : IDL.Nat64 });\n const Followees = IDL.Record({ 'followees' : IDL.Vec(NeuronId) });\n const NodeProvider = IDL.Record({ 'id' : IDL.Opt(IDL.Principal) });\n const NetworkEconomics = IDL.Record({\n 'neuron_minimum_stake_e8s' : IDL.Nat64,\n 'max_proposals_to_keep_per_topic' : IDL.Nat32,\n 'neuron_management_fee_per_proposal_e8s' : IDL.Nat64,\n 'reject_cost_e8s' : IDL.Nat64,\n 'transaction_fee_e8s' : IDL.Nat64,\n 'neuron_spawn_dissolve_delay_seconds' : IDL.Nat64,\n 'minimum_icp_xdr_rate' : IDL.Nat64,\n 'maximum_node_provider_rewards_e8s' : IDL.Nat64,\n });\n const RewardEvent = IDL.Record({\n 'day_after_genesis' : IDL.Nat64,\n 'actual_timestamp_seconds' : IDL.Nat64,\n 'distributed_e8s_equivalent' : IDL.Nat64,\n 'settled_proposals' : IDL.Vec(NeuronId),\n });\n const NeuronStakeTransfer = IDL.Record({\n 'to_subaccount' : IDL.Vec(IDL.Nat8),\n 'neuron_stake_e8s' : IDL.Nat64,\n 'from' : IDL.Opt(IDL.Principal),\n 'memo' : IDL.Nat64,\n 'from_subaccount' : IDL.Vec(IDL.Nat8),\n 'transfer_timestamp' : IDL.Nat64,\n 'block_height' : IDL.Nat64,\n });\n const GovernanceError = IDL.Record({\n 'error_message' : IDL.Text,\n 'error_type' : IDL.Int32,\n });\n const Ballot = IDL.Record({ 'vote' : IDL.Int32, 'voting_power' : IDL.Nat64 });\n const Tally = IDL.Record({\n 'no' : IDL.Nat64,\n 'yes' : IDL.Nat64,\n 'total' : IDL.Nat64,\n 'timestamp_seconds' : IDL.Nat64,\n });\n const Spawn = IDL.Record({ 'new_controller' : IDL.Opt(IDL.Principal) });\n const Split = IDL.Record({ 'amount_e8s' : IDL.Nat64 });\n const Follow = IDL.Record({\n 'topic' : IDL.Int32,\n 'followees' : IDL.Vec(NeuronId),\n });\n const RemoveHotKey = IDL.Record({\n 'hot_key_to_remove' : IDL.Opt(IDL.Principal),\n });\n const AddHotKey = IDL.Record({ 'new_hot_key' : IDL.Opt(IDL.Principal) });\n const IncreaseDissolveDelay = IDL.Record({\n 'additional_dissolve_delay_seconds' : IDL.Nat32,\n });\n const SetDissolveTimestamp = IDL.Record({\n 'dissolve_timestamp_seconds' : IDL.Nat64,\n });\n const Operation = IDL.Variant({\n 'RemoveHotKey' : RemoveHotKey,\n 'AddHotKey' : AddHotKey,\n 'StopDissolving' : IDL.Record({}),\n 'StartDissolving' : IDL.Record({}),\n 'IncreaseDissolveDelay' : IncreaseDissolveDelay,\n 'SetDissolveTimestamp' : SetDissolveTimestamp,\n });\n const Configure = IDL.Record({ 'operation' : IDL.Opt(Operation) });\n const RegisterVote = IDL.Record({\n 'vote' : IDL.Int32,\n 'proposal' : IDL.Opt(NeuronId),\n });\n const DisburseToNeuron = IDL.Record({\n 'dissolve_delay_seconds' : IDL.Nat64,\n 'kyc_verified' : IDL.Bool,\n 'amount_e8s' : IDL.Nat64,\n 'new_controller' : IDL.Opt(IDL.Principal),\n 'nonce' : IDL.Nat64,\n });\n const AccountIdentifier = IDL.Record({ 'hash' : IDL.Vec(IDL.Nat8) });\n const Amount = IDL.Record({ 'e8s' : IDL.Nat64 });\n const Disburse = IDL.Record({\n 'to_account' : IDL.Opt(AccountIdentifier),\n 'amount' : IDL.Opt(Amount),\n });\n const Command = IDL.Variant({\n 'Spawn' : Spawn,\n 'Split' : Split,\n 'Follow' : Follow,\n 'Configure' : Configure,\n 'RegisterVote' : RegisterVote,\n 'DisburseToNeuron' : DisburseToNeuron,\n 'MakeProposal' : Proposal,\n 'Disburse' : Disburse,\n });\n const ManageNeuron = IDL.Record({\n 'id' : IDL.Opt(NeuronId),\n 'command' : IDL.Opt(Command),\n });\n const ExecuteNnsFunction = IDL.Record({\n 'nns_function' : IDL.Int32,\n 'payload' : IDL.Vec(IDL.Nat8),\n });\n const RewardToNeuron = IDL.Record({ 'dissolve_delay_seconds' : IDL.Nat64 });\n const RewardToAccount = IDL.Record({\n 'to_account' : IDL.Opt(AccountIdentifier),\n });\n const RewardMode = IDL.Variant({\n 'RewardToNeuron' : RewardToNeuron,\n 'RewardToAccount' : RewardToAccount,\n });\n const RewardNodeProvider = IDL.Record({\n 'node_provider' : IDL.Opt(NodeProvider),\n 'reward_mode' : IDL.Opt(RewardMode),\n 'amount_e8s' : IDL.Nat64,\n });\n const SetDefaultFollowees = IDL.Record({\n 'default_followees' : IDL.Vec(IDL.Tuple(IDL.Int32, Followees)),\n });\n const ApproveGenesisKyc = IDL.Record({\n 'principals' : IDL.Vec(IDL.Principal),\n });\n const Change = IDL.Variant({\n 'ToRemove' : NodeProvider,\n 'ToAdd' : NodeProvider,\n });\n const AddOrRemoveNodeProvider = IDL.Record({ 'change' : IDL.Opt(Change) });\n const Motion = IDL.Record({ 'motion_text' : IDL.Text });\n const Action = IDL.Variant({\n 'ManageNeuron' : ManageNeuron,\n 'ExecuteNnsFunction' : ExecuteNnsFunction,\n 'RewardNodeProvider' : RewardNodeProvider,\n 'SetDefaultFollowees' : SetDefaultFollowees,\n 'ManageNetworkEconomics' : NetworkEconomics,\n 'ApproveGenesisKyc' : ApproveGenesisKyc,\n 'AddOrRemoveNodeProvider' : AddOrRemoveNodeProvider,\n 'Motion' : Motion,\n });\n Proposal.fill(\n IDL.Record({\n 'url' : IDL.Text,\n 'action' : IDL.Opt(Action),\n 'summary' : IDL.Text,\n })\n );\n const ProposalData = IDL.Record({\n 'id' : IDL.Opt(NeuronId),\n 'failure_reason' : IDL.Opt(GovernanceError),\n 'ballots' : IDL.Vec(IDL.Tuple(IDL.Nat64, Ballot)),\n 'proposal_timestamp_seconds' : IDL.Nat64,\n 'reward_event_round' : IDL.Nat64,\n 'failed_timestamp_seconds' : IDL.Nat64,\n 'reject_cost_e8s' : IDL.Nat64,\n 'latest_tally' : IDL.Opt(Tally),\n 'decided_timestamp_seconds' : IDL.Nat64,\n 'proposal' : IDL.Opt(Proposal),\n 'proposer' : IDL.Opt(NeuronId),\n 'executed_timestamp_seconds' : IDL.Nat64,\n });\n const ClaimOrRefreshNeuronFromAccount = IDL.Record({\n 'controller' : IDL.Opt(IDL.Principal),\n 'memo' : IDL.Nat64,\n });\n const Command_2 = IDL.Variant({\n 'Spawn' : Spawn,\n 'Split' : Split,\n 'ClaimOrRefresh' : ClaimOrRefreshNeuronFromAccount,\n 'DisburseToNeuron' : DisburseToNeuron,\n 'Disburse' : Disburse,\n });\n const NeuronInFlightCommand = IDL.Record({\n 'command' : IDL.Opt(Command_2),\n 'timestamp' : IDL.Nat64,\n });\n const BallotInfo = IDL.Record({\n 'vote' : IDL.Int32,\n 'proposal_id' : IDL.Opt(NeuronId),\n });\n const DissolveState = IDL.Variant({\n 'DissolveDelaySeconds' : IDL.Nat64,\n 'WhenDissolvedTimestampSeconds' : IDL.Nat64,\n });\n const Neuron = IDL.Record({\n 'id' : IDL.Opt(NeuronId),\n 'controller' : IDL.Opt(IDL.Principal),\n 'recent_ballots' : IDL.Vec(BallotInfo),\n 'kyc_verified' : IDL.Bool,\n 'not_for_profit' : IDL.Bool,\n 'maturity_e8s_equivalent' : IDL.Nat64,\n 'cached_neuron_stake_e8s' : IDL.Nat64,\n 'created_timestamp_seconds' : IDL.Nat64,\n 'aging_since_timestamp_seconds' : IDL.Nat64,\n 'hot_keys' : IDL.Vec(IDL.Principal),\n 'account' : IDL.Vec(IDL.Nat8),\n 'dissolve_state' : IDL.Opt(DissolveState),\n 'followees' : IDL.Vec(IDL.Tuple(IDL.Int32, Followees)),\n 'neuron_fees_e8s' : IDL.Nat64,\n 'transfer' : IDL.Opt(NeuronStakeTransfer),\n });\n const Governance = IDL.Record({\n 'default_followees' : IDL.Vec(IDL.Tuple(IDL.Int32, Followees)),\n 'wait_for_quiet_threshold_seconds' : IDL.Nat64,\n 'node_providers' : IDL.Vec(NodeProvider),\n 'economics' : IDL.Opt(NetworkEconomics),\n 'latest_reward_event' : IDL.Opt(RewardEvent),\n 'to_claim_transfers' : IDL.Vec(NeuronStakeTransfer),\n 'short_voting_period_seconds' : IDL.Nat64,\n 'proposals' : IDL.Vec(IDL.Tuple(IDL.Nat64, ProposalData)),\n 'in_flight_commands' : IDL.Vec(IDL.Tuple(IDL.Nat64, NeuronInFlightCommand)),\n 'neurons' : IDL.Vec(IDL.Tuple(IDL.Nat64, Neuron)),\n 'genesis_timestamp_seconds' : IDL.Nat64,\n });\n return [Governance];\n};","export default ({ IDL }) => {\n const AccountIdentifier = IDL.Text;\n const AttachCanisterRequest = IDL.Record({\n 'name' : IDL.Text,\n 'canister_id' : IDL.Principal,\n });\n const AttachCanisterResponse = IDL.Variant({\n 'Ok' : IDL.Null,\n 'CanisterAlreadyAttached' : IDL.Null,\n 'NameAlreadyTaken' : IDL.Null,\n 'NameTooLong' : IDL.Null,\n 'CanisterLimitExceeded' : IDL.Null,\n });\n const SubAccount = IDL.Vec(IDL.Nat8);\n const SubAccountDetails = IDL.Record({\n 'name' : IDL.Text,\n 'sub_account' : SubAccount,\n 'account_identifier' : AccountIdentifier,\n });\n const CreateSubAccountResponse = IDL.Variant({\n 'Ok' : SubAccountDetails,\n 'AccountNotFound' : IDL.Null,\n 'NameTooLong' : IDL.Null,\n 'SubAccountLimitExceeded' : IDL.Null,\n });\n const DetachCanisterRequest = IDL.Record({ 'canister_id' : IDL.Principal });\n const DetachCanisterResponse = IDL.Variant({\n 'Ok' : IDL.Null,\n 'CanisterNotFound' : IDL.Null,\n });\n const HardwareWalletAccountDetails = IDL.Record({\n 'name' : IDL.Text,\n 'account_identifier' : AccountIdentifier,\n });\n const AccountDetails = IDL.Record({\n 'account_identifier' : AccountIdentifier,\n 'hardware_wallet_accounts' : IDL.Vec(HardwareWalletAccountDetails),\n 'sub_accounts' : IDL.Vec(SubAccountDetails),\n });\n const GetAccountResponse = IDL.Variant({\n 'Ok' : AccountDetails,\n 'AccountNotFound' : IDL.Null,\n });\n const CanisterDetails = IDL.Record({\n 'name' : IDL.Text,\n 'canister_id' : IDL.Principal,\n });\n const BlockHeight = IDL.Nat64;\n const Stats = IDL.Record({\n 'latest_transaction_block_height' : BlockHeight,\n 'seconds_since_last_ledger_sync' : IDL.Nat64,\n 'sub_accounts_count' : IDL.Nat64,\n 'hardware_wallet_accounts_count' : IDL.Nat64,\n 'accounts_count' : IDL.Nat64,\n 'earliest_transaction_block_height' : BlockHeight,\n 'transactions_count' : IDL.Nat64,\n 'block_height_synced_up_to' : IDL.Opt(IDL.Nat64),\n 'latest_transaction_timestamp_nanos' : IDL.Nat64,\n 'earliest_transaction_timestamp_nanos' : IDL.Nat64,\n });\n const GetTransactionsRequest = IDL.Record({\n 'page_size' : IDL.Nat8,\n 'offset' : IDL.Nat32,\n 'account_identifier' : AccountIdentifier,\n });\n const Timestamp = IDL.Record({ 'timestamp_nanos' : IDL.Nat64 });\n const ICPTs = IDL.Record({ 'e8s' : IDL.Nat64 });\n const Send = IDL.Record({\n 'to' : AccountIdentifier,\n 'fee' : ICPTs,\n 'amount' : ICPTs,\n });\n const Receive = IDL.Record({\n 'fee' : ICPTs,\n 'from' : AccountIdentifier,\n 'amount' : ICPTs,\n });\n const Transfer = IDL.Variant({\n 'Burn' : IDL.Record({ 'amount' : ICPTs }),\n 'Mint' : IDL.Record({ 'amount' : ICPTs }),\n 'Send' : Send,\n 'Receive' : Receive,\n });\n const Transaction = IDL.Record({\n 'memo' : IDL.Nat64,\n 'timestamp' : Timestamp,\n 'block_height' : BlockHeight,\n 'transfer' : Transfer,\n });\n const GetTransactionsResponse = IDL.Record({\n 'total' : IDL.Nat32,\n 'transactions' : IDL.Vec(Transaction),\n });\n const HeaderField = IDL.Tuple(IDL.Text, IDL.Text);\n const HttpRequest = IDL.Record({\n 'url' : IDL.Text,\n 'method' : IDL.Text,\n 'body' : IDL.Vec(IDL.Nat8),\n 'headers' : IDL.Vec(HeaderField),\n });\n const HttpResponse = IDL.Record({\n 'body' : IDL.Vec(IDL.Nat8),\n 'headers' : IDL.Vec(HeaderField),\n 'status_code' : IDL.Nat16,\n });\n const RegisterHardwareWalletRequest = IDL.Record({\n 'name' : IDL.Text,\n 'account_identifier' : AccountIdentifier,\n });\n const RegisterHardwareWalletResponse = IDL.Variant({\n 'Ok' : IDL.Null,\n 'AccountNotFound' : IDL.Null,\n 'HardwareWalletAlreadyRegistered' : IDL.Null,\n 'HardwareWalletLimitExceeded' : IDL.Null,\n 'NameTooLong' : IDL.Null,\n });\n const RemoveHardwareWalletRequest = IDL.Record({\n 'account_identifier' : AccountIdentifier,\n });\n const RemoveHardwareWalletResponse = IDL.Variant({\n 'Ok' : IDL.Null,\n 'HardwareWalletNotFound' : IDL.Null,\n });\n const RenameSubAccountRequest = IDL.Record({\n 'new_name' : IDL.Text,\n 'account_identifier' : AccountIdentifier,\n });\n const RenameSubAccountResponse = IDL.Variant({\n 'Ok' : IDL.Null,\n 'AccountNotFound' : IDL.Null,\n 'SubAccountNotFound' : IDL.Null,\n 'NameTooLong' : IDL.Null,\n });\n return IDL.Service({\n 'add_account' : IDL.Func([], [AccountIdentifier], []),\n 'attach_canister' : IDL.Func(\n [AttachCanisterRequest],\n [AttachCanisterResponse],\n [],\n ),\n 'create_sub_account' : IDL.Func([IDL.Text], [CreateSubAccountResponse], []),\n 'detach_canister' : IDL.Func(\n [DetachCanisterRequest],\n [DetachCanisterResponse],\n [],\n ),\n 'get_account' : IDL.Func([], [GetAccountResponse], ['query']),\n 'get_canisters' : IDL.Func([], [IDL.Vec(CanisterDetails)], ['query']),\n 'get_icp_to_cycles_conversion_rate' : IDL.Func([], [IDL.Nat64], ['query']),\n 'get_stats' : IDL.Func([], [Stats], ['query']),\n 'get_transactions' : IDL.Func(\n [GetTransactionsRequest],\n [GetTransactionsResponse],\n ['query'],\n ),\n 'http_request' : IDL.Func([HttpRequest], [HttpResponse], ['query']),\n 'register_hardware_wallet' : IDL.Func(\n [RegisterHardwareWalletRequest],\n [RegisterHardwareWalletResponse],\n [],\n ),\n 'remove_hardware_wallet' : IDL.Func(\n [RemoveHardwareWalletRequest],\n [RemoveHardwareWalletResponse],\n [],\n ),\n 'rename_sub_account' : IDL.Func(\n [RenameSubAccountRequest],\n [RenameSubAccountResponse],\n [],\n ),\n });\n};\nexport const init = ({ IDL }) => { return []; };","export default ({ IDL }) => {\n const User = IDL.Principal;\n const BalanceRequest = IDL.Record({ 'user' : User });\n const Balance = IDL.Nat;\n const Metadata = IDL.Vec(IDL.Nat8);\n const TransferRequest = IDL.Record({\n 'to' : User,\n 'metadata' : IDL.Opt(Metadata),\n 'from' : User,\n 'amount' : Balance,\n });\n const Result_2 = IDL.Variant({\n 'ok' : IDL.Null,\n 'err' : IDL.Variant({\n 'InsufficientBalance' : IDL.Null,\n 'InvalidSource' : User,\n 'Unauthorized' : IDL.Null,\n }),\n });\n const TransferResponse = Result_2;\n const OperatorAction = IDL.Variant({\n 'removeOperator' : IDL.Null,\n 'setOperator' : IDL.Null,\n });\n const OperatorRequest = IDL.Record({\n 'owner' : User,\n 'operators' : IDL.Vec(IDL.Tuple(User, OperatorAction)),\n });\n const Result = IDL.Variant({\n 'ok' : IDL.Null,\n 'err' : IDL.Variant({ 'Unauthorized' : IDL.Null, 'InvalidOwner' : User }),\n });\n const OperatorResponse = Result;\n return IDL.Service({\n 'getBalance' : IDL.Func([BalanceRequest], [IDL.Opt(Balance)], []),\n 'getBalanceInsecure' : IDL.Func(\n [BalanceRequest],\n [IDL.Opt(Balance)],\n ['query'],\n ),\n 'getCommunityChestValueInsecure' : IDL.Func(\n [],\n [IDL.Opt(IDL.Nat)],\n ['query'],\n ),\n 'getInfo' : IDL.Func(\n [],\n [\n IDL.Record({\n 'balance' : IDL.Nat,\n 'maxLiveSize' : IDL.Nat,\n 'heap' : IDL.Nat,\n 'size' : IDL.Nat,\n }),\n ],\n ['query'],\n ),\n 'getNumberOfAccounts' : IDL.Func([], [IDL.Nat], []),\n 'getTokenInfo' : IDL.Func(\n [],\n [\n IDL.Record({\n 'fee' : IDL.Nat,\n 'totalMinted' : IDL.Nat,\n 'totalSupply' : IDL.Nat,\n 'totalTransactions' : IDL.Nat,\n }),\n ],\n ['query'],\n ),\n 'getTotalMinted' : IDL.Func([], [IDL.Nat], []),\n 'mint' : IDL.Func([IDL.Principal, IDL.Nat], [], []),\n 'transfer' : IDL.Func([TransferRequest], [TransferResponse], []),\n 'updateOperator' : IDL.Func(\n [IDL.Vec(OperatorRequest)],\n [OperatorResponse],\n [],\n ),\n });\n};\nexport const init = ({ IDL }) => { return []; };","import React from 'react';\nimport Divider from '@material-ui/core/Divider';\nimport Drawer from '@material-ui/core/Drawer';\nimport Hidden from '@material-ui/core/Hidden';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport AppsIcon from '@material-ui/icons/Apps';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport Avatar from '@material-ui/core/Avatar';\nimport AddIcon from '@material-ui/icons/Add';\nimport PeopleIcon from '@material-ui/icons/People';\nimport AllInclusiveIcon from '@material-ui/icons/AllInclusive';\nimport LockIcon from '@material-ui/icons/Lock';\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\nimport { useSelector, useDispatch } from 'react-redux'\n\nimport Blockie from '../components/Blockie';\n\nconst drawerWidth = 300;\n\nconst useStyles = makeStyles((theme) => ({\n drawer: {\n [theme.breakpoints.up('sm')]: {\n width: drawerWidth,\n flexShrink: 0,\n },\n },\n toolbar: theme.mixins.toolbar,\n drawerPaper: {\n width: drawerWidth,\n zIndex: 1\n }\n}));\n \nexport default function AccountDrawer(props) {\n const { window } = props;\n const classes = useStyles();\n const theme = useTheme();\n const container = window !== undefined ? () => window().document.body : undefined;\n const currentPrincipal = useSelector(state => state.currentPrincipal)\n const accounts = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].accounts : []))\n const idtype = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].identity.type : \"\"));\n const principal = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].identity.principal : \"\"));\n const dispatch = useDispatch()\n \n const addAccount = () => {\n var nextid = accounts.length;\n alert(principal)\n dispatch({ type: 'account/add', payload : {id : nextid, principal : principal}});\n \n props.changeRoute('accountDetail', nextid);\n };\n \n const accountsList = (\n
\n
\n {/*Stoic Wallet By Toniq Labs*/}\n \"Stoic\n
\n \n \n {accounts.map((account, index) => {\n return (\n
\n props.changeRoute('accountDetail', index)}>\n \n \n \n \n \n \n \n
\n )\n })}\n \n \n \n \n \n \n \n \n
\n \n \n props.changeRoute('addressBook')}>\n \n \n \n props.changeRoute('neurons')}>\n \n \n \n props.changeRoute('applications')}>\n \n \n \n {idtype === 'watch' ? \"\" :\n props.lockWallet()}>\n \n \n }\n \n
\n Connected to Mainnet - v1.0.0\n
\n
\n );\n \n return (\n \n );\n}","import React from 'react';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\nimport extjs from '../ic/extjs.js';\nimport { useSelector } from 'react-redux'\n\nconst styles = {\n root: {\n height: \"100%\",\n },\n selectedCard: {\n height: \"100%\",\n backgroundColor: '#003240',\n color: 'white'\n },\n card: {\n height: \"100%\",\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n};\nvar intervalId = 0;\nconst api = extjs.connect(\"https://boundary.ic0.app/\");\nexport default function TokenCard(props) {\n const [balance, setBalance] = React.useState(false);\n const currentPrincipal = useSelector(state => state.currentPrincipal)\n const identity = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].identity : {}));\n const handleClick = () => {\n props.onClick();\n };\n const updateBalance = () => {\n api.token(props.data.id).getBalance(props.address, identity.principal).then(b => {\n setBalance(Number(b)/(10**props.data.decimals));\n });\n }\n React.useEffect(() => {\n updateBalance();\n intervalId = setInterval(() => updateBalance(), 10000);\n return () => {\n clearInterval(intervalId);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n setBalance(false);\n updateBalance();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.address]);\n return (\n \n \n \n \n \n {props.data.name}\n \n \n {balance === false ? \"Loading\" : balance + \" \" + props.data.symbol}\n \n {/*\n ~$123.04USD\n */}\n \n \n \n \n );\n}\n","import { blobFromHex, blobFromUint8Array, blobToHex, SignIdentity, blobFromBuffer, } from '@dfinity/agent';\nimport { Buffer } from 'buffer/';\nimport * as bigintConversion from 'bigint-conversion'\nconst ellipticcurve = require(\"starkbank-ecdsa\");\nconst Ecdsa = ellipticcurve.Ecdsa;\nconst PrivateKey = ellipticcurve.PrivateKey;\nconst PublicKey = ellipticcurve.PublicKey;\nfunction stringToBytes ( str ) {\n var ch, st, re = [];\n for (var i = 0; i < str.length; i++ ) {\n ch = str.charCodeAt(i); // get char \n st = []; // set up \"stack\"\n do {\n st.push( ch & 0xFF ); // push byte to stack\n ch = ch >> 8; // shift value down by 1 byte\n } \n while ( ch );\n re = re.concat( st.reverse() );\n }\n return re;\n}\nexport class Secp256k1PublicKey {\n constructor(key) {\n this.rawKey = key;\n }\n static fromRaw(rawKey) {\n return new Secp256k1PublicKey(rawKey);\n }\n static fromDer(derKey) {\n return new Secp256k1PublicKey(PublicKey.fromDer(derKey));\n }\n toDer() {\n var s = this.rawKey.toDer();\n if (typeof s == 'string') s = new Uint8Array(stringToBytes(this.rawKey.toDer()));\n return blobFromUint8Array(s);\n }\n toRaw() {\n return this.rawKey;\n }\n}\nexport class Secp256k1KeyIdentity extends SignIdentity {\n constructor(publicKey, _privateKey) {\n super();\n this._privateKey = _privateKey;\n this._publicKey = Secp256k1PublicKey.fromRaw(publicKey);\n }\n static fromPem(pem) {\n let publicKey, secretKey;\n if (pem) {\n secretKey = PrivateKey.fromPem(pem);\n } else {\n throw new Error(\"Error\");\n }\n publicKey = secretKey.publicKey();\n return new this(Secp256k1PublicKey.fromRaw(publicKey), secretKey);\n }\n static fromParsedJson(obj) {\n const [publicKeyDer, privateKeyDer] = obj;\n return new Secp256k1KeyIdentity(Secp256k1PublicKey.fromDer(blobFromHex(publicKeyDer)), PrivateKey.fromDer(blobFromHex(privateKeyDer)));\n }\n static fromJSON(json) {\n const parsed = JSON.parse(json);\n if (Array.isArray(parsed)) {\n if (typeof parsed[0] === 'string' && typeof parsed[1] === 'string') {\n return this.fromParsedJson([parsed[0], parsed[1]]);\n }\n else {\n throw new Error('Deserialization error: JSON must have at least 2 items.');\n }\n }\n else if (typeof parsed === 'object' && parsed !== null) {\n const { publicKey, _publicKey, secretKey, _privateKey } = parsed;\n const pk = publicKey\n ? Secp256k1PublicKey.fromRaw(blobFromUint8Array(new Uint8Array(publicKey.data)))\n : Secp256k1PublicKey.fromDer(blobFromUint8Array(new Uint8Array(_publicKey.data)));\n if (publicKey && secretKey && secretKey.data) {\n return new Secp256k1KeyIdentity(pk, blobFromUint8Array(new Uint8Array(secretKey.data)));\n }\n else if (_publicKey && _privateKey && _privateKey.data) {\n return new Secp256k1KeyIdentity(pk, blobFromUint8Array(new Uint8Array(_privateKey.data)));\n }\n }\n throw new Error(`Deserialization error: Invalid JSON type for string: ${JSON.stringify(json)}`);\n }\n static fromKeyPair(publicKey, privateKey) {\n return new Secp256k1KeyIdentity(Secp256k1PublicKey.fromDer(publicKey.toDer()), privateKey);\n }\n /**\n * Serialize this key to JSON.\n */\n toJSON() {\n return [blobToHex(this._publicKey.toDer()), blobToHex(stringToBytes(this._privateKey.toDer()))];\n }\n /**\n * Return a copy of the key pair.\n */\n getKeyPair() {\n return {\n secretKey: this._privateKey,\n publicKey: this._publicKey.toRaw(),\n };\n }\n /**\n * Return the public key.\n */\n getPublicKey() {\n return this._publicKey;\n }\n /**\n * Signs a blob of data, with this identity's private key.\n * @param challenge - challenge to sign with this identity's secretKey, producing a signature\n */\n async sign(challenge) {\n const blob = challenge instanceof Buffer\n ? blobFromBuffer(challenge)\n : blobFromUint8Array(new Uint8Array(challenge));\n const signature = Ecdsa.sign(blob, this._privateKey);\n var ra = bigintConversion.bigintToBuf(signature.r);\n var sa = bigintConversion.bigintToBuf(signature.s);\n return blobFromUint8Array(new Uint8Array([...Array.from(new Uint8Array(ra)), ...Array.from(new Uint8Array(sa))]));\n }\n}\n","/* global BigInt */\nimport { Ed25519KeyIdentity } from \"@dfinity/identity\";\nimport { AuthClient } from \"@dfinity/auth-client\";\nimport { Secp256k1KeyIdentity } from \"./secp256k1.js\";\nimport OpenLogin from \"@toruslabs/openlogin\";\nimport { \n mnemonicToId, \n validatePrincipal, \n encrypt, \n decrypt, \n fromHexString, \n bip39 } from \"./utils.js\";\nimport * as tweetnacl from 'tweetnacl';\n// import { identityTypes } from \"../utils.js\";\nconst ellipticcurve = require(\"starkbank-ecdsa\");\nwindow.tweetnacl = tweetnacl;\nwindow.ellipticcurve = ellipticcurve;\n\nvar identities = {};\nvar openlogin = false;\n//var _iisessionInterval = false;\nconst oauths = ['google', 'twitter', 'facebook', 'github'];\nconst loadOpenLogin = async () => {\n if (!openlogin) {\n openlogin = new OpenLogin({\n clientId: \"BHGs7-pkZO-KlT_BE6uMGsER2N1PC4-ERfU_c7BKN1szvtUaYFBwZMC2cwk53yIOLhdpaOFz4C55v_NounQBOfU\",\n network: \"mainnet\",\n uxMode : 'popup',\n });\n }\n await openlogin.init();\n return openlogin;\n}\nconst processId = (id, type) => {\n var p = id.getPrincipal().toString();\n identities[p] = id;\n return {\n principal : p,\n type : type\n }\n}\nconst isLoaded = (p) => {\n return (identities.hasOwnProperty(p));\n};\nconst StoicIdentity = {\n getIdentity : (principal) => {\n if (!identities.hasOwnProperty(principal)) return false;\n return identities[principal];\n },\n setup : (type, optdata) => {\n return new Promise(async (resolve, reject) => {\n var id;\n switch(type){\n case \"ii\":\n var auth = await AuthClient.create();\n auth.login({\n maxTimeToLive : BigInt(24*60*60*1000000000),\n identityProvider: \"https://identity.ic0.app/\",\n onSuccess: async () => {\n id = await auth.getIdentity()\n return resolve(processId(id, type));\n },\n onError : reject\n });\n return;\n case \"private\":\n localStorage.setItem('_m', optdata.mnemonic);\n id = mnemonicToId(optdata.mnemonic);\n encrypt(optdata.mnemonic, id.getPrincipal().toString(), optdata.password).then(_em => {\n var ems = localStorage.getItem('_em');\n if (!ems) {\n ems = {};\n ems[id.getPrincipal().toString()] = _em;\n } else {\n ems = JSON.parse(ems);\n ems[id.getPrincipal().toString()] = _em;\n }\n localStorage.setItem('_em', JSON.stringify(ems));\n return resolve(processId(id, type)); \n });\n return;\n case \"pem\":\n id = Secp256k1KeyIdentity.fromPem(optdata.pem);\n return resolve(processId(id, type));\n case \"watch\":\n return resolve({\n principal : optdata.principal,\n type : type\n }); \n default: break;\n }\n \n if (oauths.indexOf(type) >= 0) {\n const openlogin = await loadOpenLogin();\n if (openlogin.privKey) {\n await openlogin.logout();\n }\n await openlogin.login({\n loginProvider: type,\n });\n id = Ed25519KeyIdentity.generate(new Uint8Array(fromHexString(openlogin.privKey)));\n return resolve(processId(id, type));\n }\n \n return reject(\"Cannot setup, invalid type: \" + type);\n });\n },\n load : (_id) => {\n console.log(_id)\n return new Promise(async (resolve, reject) => {\n var id;\n switch(_id.type){\n case \"ii\":\n var auth = await AuthClient.create();\n id = await auth.getIdentity();\n if (id.getPrincipal().toString() === '2vxsx-fae') return reject(\"Not logged in\");\n if (id.getPrincipal().toString() !== _id.principal) return reject(\"Logged in using the incorrect user: \" + id.getPrincipal().toString() + \" but expecting \" + _id.principal);\n return resolve(processId(id, _id.type)); \n case \"private\":\n if (!isLoaded(_id.principal)) { \n var t = localStorage.getItem('_m');\n if (!t){\n return reject(\"No seed\");\n } else {\n var mnemonic = t;\n id = mnemonicToId(mnemonic);\n return resolve(processId(id, _id.type));\n }\n } else {\n return resolve({\n principal : _id.principal,\n type : _id.type\n });\n }\n case \"pem\":\n if (!isLoaded(_id.principal)) return reject(); \n return resolve({\n principal : _id.principal,\n type : _id.type\n }); \n case \"watch\":\n return resolve({\n principal : _id.principal,\n type : _id.type\n }); \n default: break;\n }\n if (oauths.indexOf(_id.type) >= 0) {\n const openlogin = await loadOpenLogin();\n if (!openlogin.privKey || openlogin.privKey.length === 0) {\n return reject(\"Not logged in\");\n } else {\n id = Ed25519KeyIdentity.generate(new Uint8Array(fromHexString(openlogin.privKey)));\n if (id.getPrincipal().toString() !== _id.principal) {\n await openlogin.logout();\n return reject(\"Logged in using the incorrect user \" + id.getPrincipal().toString() + \" expecting \" + _id.principal);\n } else {\n return resolve(processId(id, _id.type)); \n }\n }\n }\n return reject();\n });\n },\n unlock : (_id, optdata) => {\n return new Promise(async (resolve, reject) => {\n StoicIdentity.load(_id).then(resolve).catch(async e => {\n var id;\n switch(_id.type) {\n case \"ii\":\n var auth = await AuthClient.create();\n auth.login({\n maxTimeToLive : BigInt(24*60*60*1000000000),\n identityProvider: \"https://identity.ic0.app/\",\n onSuccess: async () => {\n id = await auth.getIdentity()\n if (id.getPrincipal().toString() === '2vxsx-fae') return reject(\"Not logged in\");\n if (id.getPrincipal().toString() !== _id.principal) return reject(\"Logged in using the incorrect user: \" + id.getPrincipal().toString() + \" but expecting \" + _id.principal);\n return resolve(processId(id, _id.type));\n },\n onError : reject\n });\n return;\n case \"private\":\n var t = localStorage.getItem('_em');\n if (!t) return reject(\"No encrypted seed to decrypt\");\n var ems = JSON.parse(t);\n var em;\n if (ems.hasOwnProperty(\"iv\") === true) {\n //old format\n //convert to new?\n em = JSON.stringify(ems);\n var nems = {};\n nems[_id.principal] = em;\n localStorage.setItem('_em', JSON.stringify(nems));\n } else {\n if (ems.hasOwnProperty(_id.principal) === false) return reject(\"No encrypted seed to decrypt\");\n em = ems[_id.principal];\n }\n decrypt(em, _id.principal, optdata.password).then(mnemonic => {\n localStorage.setItem('_m', mnemonic);\n id = mnemonicToId(mnemonic);\n return resolve(processId(id, _id.type));\n }).catch(reject);\n return;\n case \"pem\":\n id = Secp256k1KeyIdentity.fromPem(optdata.pem);\n return resolve(processId(id, _id.type));\n default: break;\n }\n \n if (oauths.indexOf(_id.type) >= 0) {\n try {\n const openlogin = await loadOpenLogin();\n if (!openlogin.privKey) {\n await openlogin.login({\n loginProvider: _id.type,\n });\n }\n id = Ed25519KeyIdentity.generate(new Uint8Array(fromHexString(openlogin.privKey)));\n if (id.getPrincipal().toString() !== _id.principal) {\n await openlogin.logout();\n return reject(\"Logged in using the incorrect user \" + id.getPrincipal().toString() + \" expecting \" + _id.principal);\n } else {\n return resolve(processId(id, _id.type)); \n }\n } catch (e) {\n return reject(\"Something happened\");\n }\n }\n //reject(\"Invalid login type\");\n });\n });\n },\n lock : (_id) => {\n return new Promise(async (resolve, reject) => {\n switch(_id.type){\n case \"ii\":\n var auth = await AuthClient.create();\n auth.logout();\n break;\n case \"private\":\n localStorage.removeItem(\"_m\");\n break;\n default: break;\n }\n if (oauths.indexOf(_id.type) >= 0) {\n try {\n const openlogin = await loadOpenLogin();\n await openlogin.logout();\n } catch (e) {\n console.log(e);\n }\n }\n delete identities[_id.principal];\n return resolve(true);\n });\n },\n clear : (_id) => {\n return new Promise(async (resolve, reject) => {\n switch(_id.type){\n case \"ii\":\n var auth = await AuthClient.create();\n auth.logout();\n break;\n case \"private\":\n localStorage.removeItem(\"_m\");\n localStorage.removeItem(\"_em\");\n break;\n default: break;\n }\n if (oauths.indexOf(_id.type) >= 0) {\n try {\n const openlogin = await loadOpenLogin();\n await openlogin.logout();\n } catch (e) {\n console.log(e);\n }\n }\n delete identities[_id.principal];\n return resolve(true);\n });\n },\n change : (_id, type, optdata) => {\n return new Promise(async (resolve, reject) => {\n switch(_id.type){\n case \"ii\":\n var auth = await AuthClient.create();\n auth.logout();\n break;\n case \"private\":\n localStorage.removeItem(\"_m\");\n break;\n default: break;\n }\n if (oauths.indexOf(_id.type) >= 0) {\n try {\n const openlogin = await loadOpenLogin();\n await openlogin.logout();\n } catch (e) {\n console.log(e);\n }\n }\n //setup new\n delete identities[_id.principal];\n StoicIdentity.setup(type, optdata).then(resolve).catch(reject);\n });\n },\n validatePrincipal : validatePrincipal,\n validateMnemonic : bip39.validateMnemonic,\n generateMnemonic : bip39.generateMnemonic,\n validatePassword : (p) => {\n var re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d\\w\\W]{8,}$/;\n return re.test(p);\n }\n}\nexport {StoicIdentity};\n","import React from 'react';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\nimport Typography from '@material-ui/core/Typography';\nimport Timestamp from 'react-timestamp';\nimport extjs from '../ic/extjs.js';\n\nvar intervalId = 0;\nconst api = extjs.connect(\"https://boundary.ic0.app/\");\nexport default function Transactions(props) {\n const [transactions, setTransactions] = React.useState(false);\n const styles = {\n empty : {\n maxWidth:400,\n margin : \"0 auto\",\n },\n table: {\n minWidth: 650,\n },\n };\n const updateTransactions = (_id, _address) => {\n return api.token(_id).getTransactions(_address).then(txs => {\n return [txs, _id, _address];\n });\n }\n const stopPoll = () => {\n if (intervalId) clearInterval(intervalId);\n intervalId = 0;\n }\n const startPoll = () => {\n if (intervalId) stopPoll();\n fetchTx();\n intervalId = setInterval(fetchTx, 10000);\n };\n const formatNumber = n => {\n return n.toFixed(8).replace(/0{1,6}$/, '');\n };\n const fetchTx = () => {\n //console.log(\"Fetching for \" + props.data.id);\n updateTransactions(props.data.id, props.address).then(txs => {\n //console.log(\"Fetched for \" + txs[1]);\n //console.log(\"Current \" + props.data.id);\n if (txs[1] !== props.data.id || txs[2] !== props.address) return;\n setTransactions(txs[0]);\n });\n };\n React.useEffect(() => {\n startPoll();\n return () => {\n stopPoll();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n \n stopPoll();\n setTimeout( () => {\n setTransactions(false);\n startPoll();\n }, 100);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.address, props.data.id]);\n\n return (\n <>\n {transactions === false ?\n
\n \n Loading transactions...\n \n
: (transactions.length === 0 ?\n
\n \n No transactions available\n \n
:\n \n \n \n \n Date\n Description\n Amount\n \n \n \n {transactions.map((tx, i) => (\n \n \n \n \n \n {tx.from === props.address ?\n <>Sent {tx.amount} {props.data.symbol} to {tx.to} with a {tx.fee} {props.data.symbol} Fee
(View Transaction) :\n <>Received {tx.amount} {props.data.symbol} from {tx.from}
(View Transaction) }\n
\n \n {tx.from === props.address ? \n -{formatNumber(tx.amount + tx.fee)} : \n +{formatNumber(tx.amount)}\n }\n \n
\n ))}\n
\n
\n
) }\n \n );\n}\n","import React from 'react';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport LaunchIcon from '@material-ui/icons/Launch';\nimport Paper from '@material-ui/core/Paper';\nimport SendIcon from '@material-ui/icons/Send';\nimport Typography from '@material-ui/core/Typography';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport SnackbarButton from '../components/SnackbarButton';\nimport extjs from '../ic/extjs.js';\nimport {toHexString} from '../ic/utils.js';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { compressAddress, clipboardCopy } from '../utils.js';\nimport { useSelector, useDispatch } from 'react-redux'\n\nconst api = extjs.connect(\"https://boundary.ic0.app/\");\nconst nftMap = {\n \"e3izy-jiaaa-aaaah-qacbq-cai\" : \"Cronics\"\n};\nconst loadedBearers = {}\nexport default function NFTList(props) {\n const currentPrincipal = useSelector(state => state.currentPrincipal)\n const currentAccount = useSelector(state => state.currentAccount)\n const account = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].accounts[currentAccount] : {}));\n const [nfts, setNfts] = React.useState([]);\n const [bearers, setBearers] = React.useState({});\n \n const dispatch = useDispatch()\n \n const styles = {\n empty : {\n maxWidth:400,\n margin : \"0 auto\",\n },\n table: {\n minWidth: 650,\n },\n };\n \n const sendNft = () => {\n error(\"Sending NFT's is currently not enabled\");\n }\n const deleteNft = (id) => {\n props.confirm(\"Please confirm\", \"You are about to remove this NFT from your account? This does not affect the ownership of the NFT, and you can add it back again in future\").then(v => {\n dispatch({ type: 'account/nft/remove', payload: {id:id}});\n });\n };\n const getBearer = (id) => {\n api.token(id).getBearer().then(b => {\n loadedBearers[id] = b;\n setBearers(loadedBearers);\n });\n };\n const error = (e) => {\n props.error(e);\n }\n React.useEffect(() => {\n var _nfts = [];\n account.nfts.map(nft => {\n _nfts.push({\n id : nft.id,\n canister : extjs.decodeTokenId(nft.id).canister,\n metadata : toHexString(nft.metadata.metadata[0]),\n bearer : false\n })\n getBearer(nft.id);\n return false;\n });\n setNfts(_nfts);\n }, [currentAccount, account.nfts]);\n\n\n return (\n <>\n {nfts.length === 0 ?\n
\n \n You have no NFT's right now\n \n
:\n \n \n \n \n ID\n Preview\n Canister\n Metadata\n Bearer\n Actions\n \n \n \n {nfts.map((nft, i) => {\n return (\n \n {compressAddress(nft.id)}\n clipboardCopy(nft.id)}\n >\n \n \n \n \n \n \n {compressAddress(nft.id)}\n \n \n \n {nftMap[nft.canister] ?? compressAddress(nft.canister)}\n \n \n \n \n \n \n {nft.metadata.substr(0, 22)+\"...\"}\n clipboardCopy(nft.metadata)}\n >\n \n \n \n \n \n {bearers[nft.id] ? (bearers[nft.id] === account.address ? {\"Owned by You\"} : \n <>\n {compressAddress(bearers[nft.id])} \n \n \n \n \n \n ) : \"Loading...\"}\n \n \n deleteNft(nft.id)}>\n \n \n \n \n sendNft(nft.id)}>\n \n \n \n \n )\n })}\n \n
\n
}\n \n );\n}\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Fab from '@material-ui/core/Fab';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n '& > *': {\n margin: theme.spacing(1),\n },\n },\n}));\n\nexport default function MainFab(props) {\n const classes = useStyles();\n const style = {\n margin: 0,\n top: 'auto',\n right: 20,\n bottom: 20,\n left: 'auto',\n position: 'fixed',\n };\n return (\n
\n \n {props.children}\n \n
\n );\n}\n\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux'\nimport Grid from '@material-ui/core/Grid';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport IconButton from '@material-ui/core/IconButton';\nimport Avatar from '@material-ui/core/Avatar';\nimport LaunchIcon from '@material-ui/icons/Launch';\nimport SendIcon from '@material-ui/icons/Send';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport EditIcon from '@material-ui/icons/Edit';\nimport Fab from '@material-ui/core/Fab';\nimport AddIcon from '@material-ui/icons/Add';\nimport EvStationIcon from '@material-ui/icons/EvStation';\nimport { useTheme } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Blockie from '../components/Blockie';\nimport SnackbarButton from '../components/SnackbarButton';\nimport TokenCard from '../components/TokenCard';\nimport NFTCard from '../components/NFTCard';\nimport SendForm from '../components/SendForm';\nimport TopupForm from '../components/TopupForm';\nimport Transactions from '../components/Transactions';\nimport NFTList from '../components/NFTList';\nimport MainFab from '../components/MainFab';\nimport InputForm from '../components/InputForm';\nimport extjs from '../ic/extjs.js';\nimport {StoicIdentity} from '../ic/identity.js';\nimport {validatePrincipal} from '../ic/utils.js';\nimport { clipboardCopy } from '../utils';\n\n\nconst api = extjs.connect(\"https://boundary.ic0.app/\");\nfunction AccountDetail(props) {\n const currentToken = useSelector(state => state.currentToken);\n const currentPrincipal = useSelector(state => state.currentPrincipal);\n const currentAccount = useSelector(state => state.currentAccount);\n const principal = useSelector(state => state.principals[currentPrincipal].identity.principal);\n const apps = useSelector(state => state.principals[currentPrincipal].apps);\n const idtype = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].identity.type : \"\"));\n const account = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].accounts[currentAccount] : {}));\n const [tokens, setTokens] = React.useState(account.tokens);\n \n const dispatch = useDispatch()\n \n React.useEffect(() => {\n const windowUrl = window.location.search;\n const params = new URLSearchParams(windowUrl);\n const authorizeApp = params.get('authorizeApp');\n if (authorizeApp !== null) {\n window.addEventListener('message', function(e) {\n if (e.source === window.opener) {\n if (e.data.action === 'requestAuthorization') {\n var app = apps.find(a => a.host === e.origin);\n var authResponse = {\n action : \"confirmAuthorization\", \n principal : principal, \n key : StoicIdentity.getIdentity(principal).getPublicKey().toDer(), \n type : (StoicIdentity.getIdentity(principal).hasOwnProperty('_delegation') ? \"DelegationIdentity\" : \"Standard\"),\n }\n if (app && app.apikey === e.data.apikey) {\n window.opener.postMessage(authResponse, \"*\"); \n } else {\n if (window.confirm(\"Do you want to authorize \\\"\" + e.origin + \"\\\" to access your princpal \\\"\"+principal+\"\\\"?\")) {\n if (!app) {\n app = {\n host : e.origin,\n apikey : e.data.apikey\n };\n dispatch({ type: 'app/add', payload: {app:app}});\n } else {\n app.apikey = e.data.apikey;\n dispatch({ type: 'app/edit', payload: {app:app}});\n }\n window.opener.postMessage(authResponse, \"*\");\n } else { \n window.opener.postMessage({action : \"rejectAuthorization\"}, \"*\");\n };\n }\n };\n }\n } , false);\n window.opener.postMessage({action : \"initiateStoicConnect\"}, \"*\");\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n setTokens(account.tokens);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentToken, currentAccount, currentPrincipal]);\n \n const theme = useTheme();\n const styles = {\n root : {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n grid: {\n flexGrow: 1,\n padding: theme.spacing(2)\n }\n };\n const error = (e) => {\n props.alert(\"There was an error\", e);\n };\n const alert = (t, m) => {\n props.alert(t, m);\n };\n \n const changeToken = (i) => {\n dispatch({ type: 'currentToken', payload: {index:i}});\n }\n const editAccountName = (name) => {\n if (!name) return error(\"Please enter a valid account name\");\n if (name.length > 20) return error(\"Max length or account names is 20 characters\");\n dispatch({ type: 'account/edit', payload: {name:name}});\n };\n const addToken = (cid) => {\n if (!validatePrincipal(cid)) return error(\"Please enter a valid canister ID\");\n if (account.tokens.findIndex(x => x.id === cid) >= 0) return error(\"Token has already been added\");\n if (account.nfts.findIndex(x => x.id === cid) >= 0) return error(\"Token has already been added\");\n props.loader(true);\n api.token(cid).getMetadata().then(md => {\n if (md.type === 'fungible') {\n md.id = cid;\n dispatch({ type: 'account/token/add', payload: {\n metadata : md\n }});\n props.loader(false);\n dispatch({ type: 'currentToken', payload: {index:account.tokens.length}});\n } else {\n var nft = {\n id : cid,\n metadata : md\n };\n dispatch({ type: 'account/nft/add', payload: {\n nft : nft\n }});\n props.loader(false);\n dispatch({ type: 'currentToken', payload: {index:'nft'}});\n }\n }).finally(() => {\n props.loader(false);\n });\n };\n return (\n
\n \n \n \n \n \n \n \n \n {account.address.substr(0, 22)+\"...\"}\n clipboardCopy(account.address)}\n >\n \n \n \n \n
\n } />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n {tokens.map((token, index) => {\n return ( changeToken(index)} selected={index === currentToken} />)\n })}\n { account.nfts.length > 0 ? changeToken('nft')} selected={currentToken === 'nft'} /> : \"\" }\n \n \n \n \n \n \n \n \n \n \n
\n {currentToken !== 0 && currentToken !== 'nft'?\n
\n Token ID: {account.tokens[currentToken].id}\n clipboardCopy(account.tokens[currentToken].id)}\n >\n \n \n \n \n
: \"\"}\n {currentToken === 'nft' ? : \"\"}\n {currentToken !== 'nft' ? : \"\"}\n {idtype === 'watch' ? \"\" :\n <>\n { currentToken === 0 ?\n \n \n : \"\" }\n {currentToken !== 'nft' ? \n \n \n : \"\" }\n \n }\n \n );\n}\n\nexport default AccountDetail;","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport extjs from '../ic/extjs.js';\nimport {StoicIdentity} from '../ic/identity.js';\nimport { principalToAccountIdentifier} from '../ic/utils.js';\nimport {compressAddress} from '../utils.js';\nimport { useSelector, useDispatch } from 'react-redux'\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport Avatar from '@material-ui/core/Avatar';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport Blockie from '../components/Blockie';\nimport NeuronManager from '../ic/neuron.js';\n\nconst api = extjs.connect(\"https://boundary.ic0.app/\");\nexport default function NeuronForm(props) {\n const currentPrincipal = useSelector(state => state.currentPrincipal)\n const identity = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].identity : {}));\n const accounts = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].accounts : []))\n const dispatch = useDispatch()\n\n const [open, setOpen] = React.useState(false);\n const [step, setStep] = React.useState(0);\n const [balance, setBalance] = React.useState(false);\n const [amount, setAmount] = React.useState('');\n const [subaccount, setSubaccount] = React.useState(0);\n \n React.useEffect(() => {\n if (subaccount !== false) {\n api.token().getBalance(principalToAccountIdentifier(identity.principal, subaccount), identity.principal).then(b => {\n setBalance(Number(b)/(10**8));\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subaccount]);\n \n //cold API\n\n const error = (e) => {\n props.error(e);\n }\n const review = () => {\n if (isNaN(amount)) return error(\"Please enter a valid amount to send\");\n if ((Number(amount)+Number(0.0001)) > balance) return error(\"You have insufficient ICP\"); \n if (Number(amount) < 1) return error(\"Min staking amount is 1 ICP\"); \n setStep(2);\n }\n const submit = () => {\n props.loader(true);\n setOpen(false);\n const id = StoicIdentity.getIdentity(identity.principal);\n NeuronManager.create(amount, id, subaccount).then(n => {\n dispatch({ type: 'neuron/add', payload : {neuron : n}});\n }).finally(handleClose)\n };\n const handleClick = () => {\n if (accounts.length === 1) setStep(1);\n setOpen(true);\n };\n const handleClose = () => {\n setOpen(false);\n props.loader(false);\n setTimeout(() => {\n setStep(0);\n setBalance(false);\n setAmount('');\n setSubaccount(0)\n }, 200);\n };\n return (\n <>\n {React.cloneElement(props.children, {onClick: handleClick})}\n \n {step === 0 ?\n <>\n Choose an account to stake from\n \n \n {accounts.map((account, index) => {\n return (\n { setSubaccount(index); setStep(1); }}>\n \n \n \n \n \n \n \n )\n })}\n \n \n \n : \"\" }\n {step === 1 ?\n <>\n Set the amount you want to stake\n \n You can add more ICP to this neuron, or change neuron settings later.\n <>\n setAmount(e.target.value)}\n type=\"text\"\n />\n \n { balance !== false ? \"Balance: \"+balance+\" ICP \": \"\"}\n Fee: 0.0001\n \n \n\n \n \n \n \n \n \n : \"\"}\n {step === 2 ?\n <>\n \n \n Please confirm that you are about to stake
\n {amount} ICP
\n from {compressAddress(accounts[subaccount].address)}
\n using a fee of 0.0001\n
\n \n All transactions are irreversible, so ensure the above details are correct before you continue.\n \n
\n \n \n \n \n \n : \"\" }\n
\n \n );\n}\n","import React from 'react';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport { useSelector } from 'react-redux'\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport Avatar from '@material-ui/core/Avatar';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Blockie from '../components/Blockie';\nimport extjs from '../ic/extjs.js';\nimport { principalToAccountIdentifier} from '../ic/utils.js';\nconst api = extjs.connect(\"https://boundary.ic0.app/\");\nexport default function NeuronDelayForm(props) {\n const currentPrincipal = useSelector(state => state.currentPrincipal)\n const accounts = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].accounts : []))\n const identity = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].identity : {}));\n const [amount, setAmount] = React.useState(10);\n const [step, setStep] = React.useState(0);\n const [subaccount, setSubaccount] = React.useState(0);\n const [balance, setBalance] = React.useState(false);\n \n React.useEffect(() => {\n if (subaccount !== false) {\n api.token().getBalance(principalToAccountIdentifier(identity.principal, subaccount), identity.principal).then(b => {\n setBalance(Number(b)/(10**8));\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subaccount, props.open]);\n\n return (\n <>\n \n {step === 0 ?\n <>\n Choose an account to stake from\n \n \n {accounts.map((account, index) => {\n return (\n { setSubaccount(index); setStep(1); }}>\n \n \n \n \n \n \n \n )\n })}\n \n \n \n : \"\" }\n {step === 1 ?\n <>\n Set the amount you want to stake\n \n You can add more ICP to this neuron, or change neuron settings later.\n \n setAmount(e.target.value)}\n type=\"text\"\n />\n \n { balance !== false ? \"Balance: \"+balance+\" ICP \": \"\"}\n Fee: 0.0001\n \n \n \n \n \n \n \n : \"\" }\n \n \n );\n}\n","import React from 'react';\nimport { useDispatch } from 'react-redux'\nimport AppBar from '@material-ui/core/AppBar';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport AccountCircleIcon from '@material-ui/icons/AccountCircle';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\n\nimport AccountDrawer from '../components/AccountDrawer';\n\nimport AccountDetail from '../views/AccountDetail';\nimport AddressBook from '../views/AddressBook';\nimport Neurons from '../views/Neurons';\nimport Applications from '../views/Applications';\nimport Settings from '../views/Settings';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst drawerWidth = 300;\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n appBar: {\n [theme.breakpoints.up('sm')]: {\n width: `calc(100% - ${drawerWidth}px)`,\n marginLeft: drawerWidth,\n },\n },\n menuButton: {\n marginRight: theme.spacing(2),\n [theme.breakpoints.up('sm')]: {\n display: 'none',\n },\n },\n toolbar: theme.mixins.toolbar,\n toolbarButtons: {\n marginLeft: 'auto',\n },\n content: {\n flexGrow: 1,\n },\n\n}));\n\n\n const routes = {\n 'accountDetail' : {\n title : \"Account Details\",\n view : AccountDetail\n },\n 'neurons' : {\n title : \"Neuron Management\",\n view : Neurons\n },\n 'applications' : {\n title : \"Applications\",\n view : Applications\n },\n 'addressBook' : {\n title : \"Address Book\",\n view : AddressBook\n },\n 'settings' : {\n title : \"Settings\",\n view : Settings\n },\n };\n//Helpers\n\n\nfunction Wallet(props) {\n const classes = useStyles();\n const [mobileOpen, setMobileOpen] = React.useState(false);\n const [route, setRoute] = React.useState('accountDetail');\n const [toolbarTitle, setToolbarTitle] = React.useState(routes[route].title);\n const dispatch = useDispatch()\n \n const handleDrawerToggle = () => {\n setMobileOpen(!mobileOpen);\n };\n const renderView = (r) => {\n switch(r){\n case \"accountDetail\":\n return React.createElement(routes[r].view, {alert : props.alert, confirm : props.confirm, loader : props.loader})\n case \"settings\":\n return React.createElement(routes[r].view, {alert : props.alert, confirm : props.confirm, loader : props.loader, clearWallet : clearWallet, lockWallet : lockWallet})\n case \"neurons\":\n return React.createElement(routes[r].view, {alert : props.alert, confirm : props.confirm, loader : props.loader})\n case \"applications\":\n return React.createElement(routes[r].view, {alert : props.alert, confirm : props.confirm, loader : props.loader})\n default:\n return React.createElement(routes[r].view, {alert : props.alert, confirm : props.confirm})\n }\n }\n const changeRoute = (r, i) => {\n setToolbarTitle(routes[r].title);\n setRoute(r);\n if (typeof i !== 'undefined') dispatch({ type: 'currentAccount', payload: {index:i}});\n };\n \n const lockWallet = () => {\n props.logout();\n };\n const clearWallet = () => {\n props.remove();\n };\n return (\n
\n \n \n \n \n \n \n \n \n {toolbarTitle}\n \n
\n changeRoute('settings')}\n >\n \n \n
\n
\n
\n \n
\n
\n {renderView(route)}\n
\n
\n );\n}\n\nexport default Wallet;\n","/* global BigInt */\nimport React from 'react';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport ConnectList from './components/ConnectList';\nimport WalletDialog from './components/WalletDialog';\nimport {StoicIdentity} from './ic/identity.js';\nimport { useDispatch } from 'react-redux'\nimport { Transform } from '@material-ui/icons';\nimport { useSelector } from 'react-redux'\nimport extjs from './ic/extjs.js';\nimport {principalToAccountIdentifier} from \"./ic/utils\"\nfunction Mycomponents(props){\n const [open, setOpen] = React.useState(true);\n const dispatch = useDispatch()\n const init=function(type, optdata){\n \n }\n\n const loginbtn={\n backgroundColor:\"#339999\",\n width:\"50px\",\n color:\"white\",\n textAlign:\"center\",\n padding:\"4px 10px\"\n }\n\n const currentPrincipal = useSelector(state => state.currentPrincipal)\n const currentAccount = useSelector(state => state.currentAccount)\n const identity = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].identity : {}));\n const account = useSelector(state => (state.principals.length ? state.principals[currentPrincipal].accounts[currentAccount] : {}));\n const currentToken = useSelector(state => state.currentToken);\n const [tokens, setTokens] = React.useState(account.tokens);\n\n const submit = (touser,amount,fee,succcallback,errcallback) => {\n //Submit to blockchain here\n var _from_principal = identity.principal;\n var _from_sa = currentAccount;\n // var _to_user = \"3731bc3fcb9fcca6870d0c85091a96d8a2ed04b2385e7f6e5aba52e8666f1d41\";\n var _to_user=touser\n // console.log(touser,amount,fee)\n var _amount = BigInt(amount*(10**8));\n var _fee = BigInt(fee*(10**8));//0.0001\n var _memo = null;\n var _notify = false;\n const id = StoicIdentity.getIdentity(identity.principal);\n if (!id) return console.log(\"Something wrong with your wallet, try logging in again\");\n props.loader(true);\n extjs.connect(\"https://boundary.ic0.app/\", id).token(account.tokens[currentToken].id).transfer(_from_principal, _from_sa, _to_user, _amount, _fee, _memo, _notify).then(r => {\n if (r) {\n // return props.alert(\"Transaction complete\", \"Your transfer was sent successfully\");\n succcallback(r)\n } else {\n errcallback(r)\n // return console.log(\"Something went wrong with this transfer\");\n }\n }).catch(e => {\n errcallback(e)\n // return console.log(\"There was an error: \" + e);\n }).finally(() => {\n props.loader(false);\n });\n };\n\n var uid=\"\"\n\n\n React.useEffect(() => {\n if(!window.getid){\n window.getid=getid\n }\n if(!window.initlogin){\n window.initlogin=function(){\n // props.handler();//授权登陆\n StoicIdentity.setup(\"ii\").then(identity => {\n // userid=identity.principal\n window.alertvue(1)\n dispatch({ type: 'createwallet', payload : {identity : identity}});\n }).catch(e => {\n }).finally(() => {\n props.loader(false);\n });\n }\n }\n if(!window.transfer){\n window.transfer=function(touser,amount,fee,succcallback,errcallback){\n submit(touser,amount,fee,succcallback,errcallback)\n }\n }\n if(!window.getaddress){\n window.getaddress=getaddress\n }\n }, []);\n\n\n const getid=function(){\n const id = identity.principal;\n console.log(id)\n if(id){\n uid=id;\n return id;\n }else{\n return false;\n }\n }\n\n const getaddress=function(){\n if(uid==\"\"){\n return false;\n }\n var address = principalToAccountIdentifier(uid, 0)\n console.log(address)\n return address\n }\n\n const getuserid=function(){\n window.initlogin()\n }\n\n const usertransfer=function(){\n window.transfer(\"3731bc3fcb9fcca6870d0c85091a96d8a2ed04b2385e7f6e5aba52e8666f1d41\",1,0.0001)\n }\n\n const Transform=function(){}\n\n return(\n
\n {/*
登陆
\n
转账
\n
获取id
\n
获取地址
*/}\n
\n )\n}\n\nexport default Mycomponents","import React from 'react';\nimport Wallet from './containers/Wallet';\nimport Connect from './containers/Connect';\nimport Unlock from './containers/Unlock';\nimport Backdrop from '@material-ui/core/Backdrop';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useSelector, useDispatch } from 'react-redux'\nimport { makeStyles } from '@material-ui/core/styles';\nimport {StoicIdentity} from './ic/identity.js';\nimport AlertDialog from './components/AlertDialog';\nimport ConfirmDialog from './components/ConfirmDialog';\nimport Mycomponents from \"./Mycomponents\"\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport ConnectList from './components/ConnectList';\nimport WalletDialog from './components/WalletDialog';\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n}));\nconst emptyAlert = {\n title : \"\",\n message : \"\",\n};\nexport default function App() {\n const classes = useStyles();\n const [loaderOpen, setLoaderOpen] = React.useState(false);\n const [appState, setAppState] = React.useState(false); //0 = nologin, 1 = locked, 2 = unlocked\n const principals = useSelector(state => state.principals)\n const currentPrincipal = useSelector(state => state.currentPrincipal)\n const dispatch = useDispatch()\n const [alertData, setAlertData] = React.useState(emptyAlert); \n const [confirmData, setConfirmData] = React.useState(emptyAlert); \n const [showAlert, setShowAlert] = React.useState(false);\n const [showConfirm, setShowConfirm] = React.useState(false);\n \n const remove = () => {\n loader(true);\n StoicIdentity.clear(principals[currentPrincipal].identity).then(r => {\n console.log(r)\n setAppState(0);\n loader(false);\n setTimeout(() => {\n dispatch({ type: 'removewallet'})\n }, 1000);//hack in timeout to clear views...\n })\n };\n const login = () => {\n if (principals.length === 0) {\n setAppState(0);\n } else {\n \n loader(true);\n StoicIdentity.load(principals[currentPrincipal].identity).then(i => {\n console.log(i)\n setAppState(2);\n }).catch(e => {\n setAppState(1);\n }).finally(() => loader(false));\n } \n };\n const logout = () => {\n loader(true);\n StoicIdentity.lock(principals[currentPrincipal].identity).then(r => {\n setAppState(1);\n login();\n }).finally(() => {\n loader(false);\n });\n };\n \n const alert = (title, message, buttonLabel) => {\n return new Promise(async (resolve, reject) => {\n setAlertData({\n title : title,\n message : message,\n buttonLabel : buttonLabel,\n handler : () => {\n setShowAlert(false);\n resolve(true);\n setTimeout(() => setAlertData(emptyAlert), 100);\n },\n });\n setShowAlert(true);\n })\n };\n \n const confirm = (title, message, buttonCancel, buttonConfirm) => {\n return new Promise(async (resolve, reject) => {\n setConfirmData({\n title : title,\n message : message,\n buttonCancel : buttonCancel,\n buttonConfirm : buttonConfirm,\n handler : (v) => {\n setShowConfirm(false);\n resolve(v);\n setTimeout(() => setConfirmData(emptyAlert), 100);\n },\n });\n setShowConfirm(true);\n })\n };\n \n React.useEffect(() => {\n login();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n \n }, []);\n React.useEffect(() => {\n login();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentPrincipal, principals]);\n \n const loader = (l) => {\n setLoaderOpen(l);\n };\n\n const handleClick = (t) => {\n StoicIdentity.setup(\"ii\").then(identity => {\n // userid=identity.principal\n dispatch({ type: 'createwallet', payload : {identity : identity}});\n }).catch(e => {\n }).finally(() => {\n loader(false);\n });\n };\n\n\n\n \n return (\n <>\n \n {/* {appState === 0 ?\n : \"\" }\n {appState === 1 ?\n : \"\"}\n {appState === 2 ?\n : \"\"}\n \n \n \n \n */}\n \n );\n}","import { createStore } from \"redux\";\nimport {principalToAccountIdentifier, LEDGER_CANISTER_ID} from './ic/utils.js';\n\nvar appData = {\n principals : [],\n addresses : [],\n currentPrincipal : 0,\n currentAccount : 0,\n currentToken : 0,\n};\nfunction initDb(){\n var db = localStorage.getItem('_db');\n if (db){\n db = JSON.parse(db);\n \n //db versioning\n var savenow = false;\n savenow = true;\n if (!Array.isArray(db)) {\n db = [[db],[],[0,0,0]];\n console.log(\"Converting old DB to new\");\n savenow = true;\n }\n if (db.length === 2) {\n db[2] = [0,0,0];\n savenow = true;\n }\n db[0].map(principal => {\n var _principal = {\n accounts : [],\n neurons : [],\n apps : [],\n identity : principal.identity\n };\n principal.accounts.map((account, subaccount) => {\n //savenow = true;\n //if (subaccount >= 2) return;\n if (account.length === 2) account[2] = [];\n _principal.accounts.push({\n name : account[0],\n address : principalToAccountIdentifier(principal.identity.principal, subaccount),\n tokens : [\n {\n id : LEDGER_CANISTER_ID,\n name : \"Internet Computer\",\n symbol : \"ICP\",\n decimals : 8,\n }, \n ...account[1]\n ],\n nfts : account[2] ?? []\n }); \n return true;\n });\n if (!principal.hasOwnProperty('apps')) principal.apps = [];\n principal.apps.map(app => {\n _principal.apps.push(app);\n return true;\n });\n /* Do we need to store neruons?\n if (!principal.hasOwnProperty('neurons')) principal.neurons = [];\n principal.neurons.map(neuronId => {\n _principal.neurons.push({\n id : neuronId,\n data : false\n });\n });*/\n appData.principals.push(_principal);\n return true;\n });\n \n appData.addresses = db[1];\n appData.currentPrincipal = db[2][0];\n appData.currentAccount = db[2][1];\n appData.currentToken = db[2][2];\n \n if (savenow) saveDb(appData);\n return appData;\n }\n}\nfunction newDb(identity){\n console.log(identity);\n var tc = [[\n {\n accounts : [\n [\"Main\", \n [], []\n ]\n ],\n identity : identity,\n neurons : [],\n apps : []\n }\n ],[],[0,0,0]];\n localStorage.setItem('_db', JSON.stringify(tc));\n return initDb();\n}\nfunction clearDb(){\n localStorage.removeItem('_db');\n var clearState = {\n principals : [],\n addresses : [],\n currentPrincipal : 0,\n currentAccount : 0,\n currentToken : 0,\n };\n appData = clearState;\n return clearState;\n}\nfunction saveDb(newState){\n //console.log(newState);\n var updatedDb = [[], newState.addresses, [newState.currentPrincipal, newState.currentAccount, newState.currentToken]];\n \n newState.principals.map(principal => {\n var _p = {\n accounts : [],\n neurons : [],\n apps : [],\n identity : principal.identity\n };\n principal.accounts.map(account => {\n var _a = [account.name, [], account.nfts];\n account.tokens.map((b, i) => {\n if (i === 0) return false;\n _a[1].push(b);\n return true; \n });\n _p.accounts.push(_a);\n return true;\n });\n principal.apps.map(app => {\n _p.apps.push(app);\n return true;\n });\n /* Do we need to store?\n principal.neurons.map(neuron => {\n _p.neurons.push(neuron.id);\n });*/\n updatedDb[0].push(_p);\n return true;\n });\n localStorage.setItem('_db', JSON.stringify(updatedDb));\n appData = newState;\n return newState;\n}\n\ninitDb();\nfunction rootReducer(state = appData, action) {\n switch(action.type){\n case \"app/edit\":\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n apps : principal.apps.map((app) => {\n if (app.host === action.payload.app.host) {\n return {\n ...app,\n apikey : action.payload.app.apikey\n }\n } else {\n return app;\n }\n }),\n }\n } else {\n return principal;\n }\n }),\n });\n case \"app/add\": //TODO\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n apps : [\n ...principal.apps,\n action.payload.app\n ]\n }\n } else {\n return principal;\n }\n }),\n });\n case \"app/remove\": //TODO\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n apps : principal.apps.filter(e => (e && e.host !== action.payload.host))\n }\n } else {\n return principal;\n }\n }),\n });\n case \"neuron/add\": //TODO\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n neurons : [\n ...principal.neurons,\n action.payload.neuron\n ]\n }\n } else {\n return principal;\n }\n }),\n });\n case \"neuron/scan\": //TODO\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n neurons : action.payload.neurons\n }\n } else {\n return principal;\n }\n }),\n });\n case \"account/nft/remove\":\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n accounts : principal.accounts.map((account,ii) => {\n if (ii === state.currentAccount) {\n return {\n ...account,\n nfts : account.nfts.filter(e => (e && e.id !== action.payload.id)),\n }\n } else {\n return account;\n }\n }),\n }\n } else {\n return principal;\n }\n }),\n });\n case \"removewallet\":\n return clearDb();\n case \"createwallet\":\n return newDb(action.payload.identity);\n case \"deletewallet\":\n return saveDb({\n ...state,\n currentPrincipal : (state.currentPrincipal > action.payload.index ? state.currentPrincipal - 1 : state.currentPrincipal),\n principals : state.principals.filter((e,i) => i !== action.payload.index)\n });\n case \"addwallet\": //TODO\n var cp = state.principals.length;\n return saveDb({\n ...state,\n principals : [\n ...state.principals,\n {\n accounts : [\n {\n name : \"Main\",\n address : principalToAccountIdentifier(action.payload.identity.principal, 0),\n tokens : [\n {\n id : LEDGER_CANISTER_ID,\n name : \"Internet Computer\",\n symbol : \"ICP\",\n decimals : 8,\n type : 'fungible',\n }\n ],\n nfts : []\n }\n ],\n identity : action.payload.identity,\n neurons : [],\n apps : [],\n },\n ],\n currentPrincipal : cp\n });\n case \"currentPrincipal\":\n return saveDb({\n ...state,\n currentToken : 0,\n currentAccount : 0,\n currentPrincipal : action.payload.index\n });\n case \"currentAccount\":\n return saveDb({\n ...state,\n currentToken : 0,\n currentAccount : action.payload.index\n });\n case \"currentToken\":\n return saveDb({\n ...state,\n currentToken : action.payload.index\n });\n case \"account/edit\":\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n accounts : principal.accounts.map((account,ii) => {\n if (ii === state.currentAccount) {\n return {\n ...account,\n name : action.payload.name\n }\n } else {\n return account;\n }\n }),\n }\n } else {\n return principal;\n }\n }),\n });\n case \"account/add\":\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n accounts : [...principal.accounts, {\n name : \"Account \" + action.payload.id,\n address : principalToAccountIdentifier(action.payload.principal, action.payload.id),\n tokens : [{\n name : \"Internet Computer\",\n symbol : \"ICP\",\n decimals : 8,\n }],\n nfts : []\n }]\n }\n } else {\n return principal;\n }\n }),\n });\n case \"account/token/add\":\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n accounts : principal.accounts.map((account,ii) => {\n if (ii === state.currentAccount) {\n return {\n ...account,\n tokens : [...account.tokens, action.payload.metadata]\n }\n } else {\n return account;\n }\n }),\n }\n } else {\n return principal;\n }\n }),\n });\n case \"account/nft/add\":\n return saveDb({\n ...state,\n principals : state.principals.map((principal,i) => {\n if (i === state.currentPrincipal) {\n return {\n ...principal,\n accounts : principal.accounts.map((account,ii) => {\n if (ii === state.currentAccount) {\n return {\n ...account,\n nfts : [...account.nfts, action.payload.nft]\n }\n } else {\n return account;\n }\n }),\n }\n } else {\n return principal;\n }\n }),\n });\n case \"addresses/add\":\n return saveDb({\n ...state,\n addresses: [...state.addresses, action.payload]\n });\n case \"addresses/edit\": \n return saveDb({\n ...state,\n addresses: state.addresses.map((address,i) => {\n if (i === action.payload.index) {\n return {\n name : action.payload.name,\n address : action.payload.address,\n }\n } else {\n return address;\n }\n })\n });\n case \"addresses/delete\":\n return saveDb({\n ...state,\n addresses : state.addresses.filter((e,i) => i !== action.payload)\n });\n default: break;\n }\n return state;\n};\nconst store = createStore(rootReducer);\n\nexport default store;","import { red } from '@material-ui/core/colors';\nimport { createMuiTheme } from '@material-ui/core/styles';\n\n// A custom theme for this app\nconst theme = createMuiTheme({\n // palette: {\n // primary: {\n // main: '#003240',\n // },\n // secondary: {\n // main: '#00b894',\n // },\n // error: {\n // main: red.A400,\n // },\n // background: {\n // default: '#fafafa',\n // },\n // },\n // overrides: {\n // MuiCssBaseline: {\n // \"@global\": {\n // body: {\n // backgroundImage:\n // \"url(./bg.png)\"\n // }\n // }\n // },\n // MuiIconButton: {\n // label : {\n // color : \"#00b894\"\n // }\n // },\n // MuiAvatar: {\n // colorDefault: {\n // backgroundColor : '#00b894',\n // color : 'white'\n // },\n // },\n // MuiListItemIcon: {\n // root: {\n // color : '#00b894'\n // },\n // },\n // },\n});\n\nexport default theme;","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { ThemeProvider } from '@material-ui/core/styles';\nimport App from './App';\nimport { Provider } from 'react-redux'\nimport store from './store'\nimport {StoicIdentity} from './ic/identity.js';\nimport theme from './theme';\nimport '@fontsource/roboto';\n\nconst params = new URLSearchParams(window.location.search);\nif (params.get('stoicTunnel') !== null) {\n const hex2buf = (hex) => {\n const view = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n view[i / 2] = parseInt(hex.substring(i, i + 2), 16)\n }\n return view;\n };\n function buf2hex(buffer) {\n return [...new Uint8Array(buffer)]\n .map(x => x.toString(16).padStart(2, '0'))\n .join('');\n }\n const sendMessageToExtension = (e, success, data) => {\n window.parent.postMessage({\n action : e.data.action,\n listener : e.data.listener,\n target : \"STOIC-EXT\",\n success : success,\n data : data\n }, '*')\n }\n const verify = async (data, apikey, sig) => {\n var enc = new TextEncoder();\n var encdata = enc.encode(data);\n var pubk = await window.crypto.subtle.importKey(\n \"spki\",\n hex2buf(apikey),\n {\n name: \"ECDSA\",\n namedCurve: \"P-384\"\n },\n true,\n [\"verify\"]\n );\n return await window.crypto.subtle.verify(\n {\n name: \"ECDSA\",\n hash: {name: \"SHA-384\"},\n },\n pubk,\n hex2buf(sig),\n encdata\n );\n };\n window.addEventListener(\"message\", async function(e){\n if (e && e.data && e.data.target === 'STOIC-IFRAME') {\n const state = store.getState();\n const principal = state.principals[state.currentPrincipal];\n if (principal.identity.principal === e.data.principal) {\n if (principal.apps.filter(a => a.apikey === e.data.apikey).length > 0) {\n StoicIdentity.load(principal.identity).then(async () => {\n var id = StoicIdentity.getIdentity(e.data.principal);\n if (id) {\n var verified = await verify(e.data.payload, e.data.apikey, e.data.sig);\n if (verified) {\n var response = {\n signed : buf2hex(await id.sign(hex2buf(e.data.payload)))\n };\n if (id.hasOwnProperty('_delegation') ) {\n response.chain = id.getDelegation().toJSON();\n }\n sendMessageToExtension(e, true, JSON.stringify(response));\n switch (e.data.action) {\n case 'sign':\n break;\n default:\n break;\n }\n } else { \n sendMessageToExtension(e, false, \"Invalid signature for payload\");\n }\n } else { \n sendMessageToExtension(e, false, \"The principal is not unlocked\");\n }\n }).catch(err => { \n sendMessageToExtension(e, false, err);\n });\n } else {\n sendMessageToExtension(e, false, \"API key is not valid for this principal\");\n }\n } else {\n sendMessageToExtension(e, false, \"Incorrect Principal is logged in\");\n }\n }\n }, false);\n} else {\n ReactDOM.render(\n \n \n \n \n \n ,\n document.querySelector('#root'),\n ); \n}","/* global BigInt */\nimport { Principal } from \"@dfinity/agent\"; \nimport { Ed25519KeyIdentity } from \"@dfinity/identity\";\nimport { getCrc32 } from '@dfinity/agent/lib/esm/utils/getCrc';\nimport { sha224 } from '@dfinity/agent/lib/esm/utils/sha224';\nimport RosettaApi from './RosettaApi.js';\nconst LEDGER_CANISTER_ID = \"ryjl3-tyaaa-aaaaa-aaaba-cai\";\nconst GOVERNANCE_CANISTER_ID = \"rrkah-fqaaa-aaaaa-aaaaq-cai\";\nconst NNS_CANISTER_ID = \"qoctq-giaaa-aaaaa-aaaea-cai\";\nconst CYCLES_MINTING_CANISTER_ID = \"rkp4c-7iaaa-aaaaa-aaaca-cai\";\nconst rosettaApi = new RosettaApi();\nconst sjcl = require('sjcl')\nconst bip39 = require('bip39')\nconst pbkdf2 = require(\"pbkdf2\");\n\nconst getCyclesTopupAddress = (canisterId) => {\n return principalToAccountIdentifier(CYCLES_MINTING_CANISTER_ID, getCyclesTopupSubAccount(canisterId));\n}\nconst getCyclesTopupSubAccount = (canisterId) => {\n var pb = Array.from(Principal.fromText(canisterId).toBlob());\n return [pb.length, ...pb];\n}\nconst amountToBigInt = (amount, decimals) => {\n //decimals = decimals ?? 8;\n if (amount < 1) {\n amount = BigInt(amount*(10**decimals));\n } else {\n amount = BigInt(amount)*BigInt(10**decimals)\n }\n return amount;\n}\nconst principalToAccountIdentifier = (p, s) => {\n const padding = Buffer(\"\\x0Aaccount-id\");\n const array = new Uint8Array([\n ...padding,\n ...Principal.fromText(p).toBlob(),\n ...getSubAccountArray(s)\n ]);\n const hash = sha224(array);\n const checksum = to32bits(getCrc32(hash));\n const array2 = new Uint8Array([\n ...checksum,\n ...hash\n ]);\n return toHexString(array2);\n};\nconst getSubAccountArray = (s) => {\n if (Array.isArray(s)){\n return s.concat(Array(32-s.length).fill(0));\n } else {\n //32 bit number only\n return Array(28).fill(0).concat(to32bits(s ? s : 0))\n }\n};\nconst from32bits = ba => {\n var value;\n for (var i = 0; i < 4; i++) {\n value = (value << 8) | ba[i];\n }\n return value;\n}\nconst to32bits = num => {\n let b = new ArrayBuffer(4);\n new DataView(b).setUint32(0, num);\n return Array.from(new Uint8Array(b));\n}\nconst toHexString = (byteArray) =>{\n return Array.from(byteArray, function(byte) {\n return ('0' + (byte & 0xFF).toString(16)).slice(-2);\n }).join('')\n}\nconst fromHexString = (hex) => {\n if (hex.substr(0,2) === \"0x\") hex = hex.substr(2);\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n}\nconst mnemonicToId = (mnemonic) => {\n var seed = bip39.mnemonicToSeedSync(mnemonic);\n seed = Array.from(seed);\n seed = seed.splice(0, 32);\n seed = new Uint8Array(seed);\n return Ed25519KeyIdentity.generate(seed);\n}\nconst encrypt = (mnemonic, principal, password) => {\n return new Promise((resolve, reject) => {\n pbkdf2.pbkdf2(password, principal, 30000, 512, 'sha512', (e, d) => {\n if (e) return reject(e);\n resolve(sjcl.encrypt(d.toString(), btoa(mnemonic)));\n });\n });\n}\nconst decrypt = (data, principal, password) => {\n return new Promise((resolve, reject) => {\n pbkdf2.pbkdf2(password, principal, 30000, 512, 'sha512', (e, d) => {\n if (e) return reject(e);\n try{\n resolve(atob(sjcl.decrypt(d.toString(), data)));\n } catch (e) {\n reject(e);\n }\n });\n });\n}\nconst isHex = (h) => {\n var regexp = /^[0-9a-fA-F]+$/;\n return regexp.test(h);\n};\nconst validateAddress = (a) => {\n return (isHex(a) && a.length === 64)\n}\nconst validatePrincipal = (p) => {\n try {\n return (p === Principal.fromText(p).toText());\n } catch (e) {\n return false;\n }\n}\nexport { \n LEDGER_CANISTER_ID, \n GOVERNANCE_CANISTER_ID, \n NNS_CANISTER_ID, \n CYCLES_MINTING_CANISTER_ID, \n getCyclesTopupAddress, \n getCyclesTopupSubAccount, \n amountToBigInt, \n rosettaApi, \n Principal, \n principalToAccountIdentifier, \n getSubAccountArray, \n from32bits, \n to32bits, \n toHexString, \n fromHexString, \n mnemonicToId, \n encrypt, \n decrypt, \n isHex,\n bip39,\n validateAddress,\n validatePrincipal };"],"sourceRoot":""}