UNPKG

godprotocol

Version:

A distributed computing environment for Web 4.0 — integrating AI, decentralisation, and virtual computation.

49 lines (40 loc) 1.96 kB
class Wallet{ constructor(instance){ this.instance = instance; } transfer = async(price, recipient)=>{ let {vm} = this.instance.account let folder = await this.instance._folder() let wallet_folder = await folder.child('wallet') let tok = await (await wallet_folder.readone({_id: price.token})).literal() if (!tok) return {successful: false, message:"Doesn't have token"} if(tok.value< price.value) return {successful: false, message:"Insufficient balance"} await wallet_folder.update({_id: tok._id}, {value: {$dec: price.value}}) let transactions = await wallet_folder.child(price.token) let recent_tx = await (await transactions.readone()).literal() let tx = {value: price.value, previous: await vm.hash(recent_tx), recipient: recipient.ref(), timestamp: Date.now()} tx.hash = await vm.hash(tx) let res = await transactions.write(tx) await wallet_folder.child('transactions').write(await res.to_address()) let recipient_folder = await recipient._folder() let recipient_wallet = await recipient_folder.child('wallet'), sender_ref = `${res.ref()}:${tx.hash}`; let rec_tok = await recipient_wallet.readone({_id: price.token}) let rec_txs = await recipient_wallet.child(price.token), rec_tx; if(!rec_tok){ await recipient_wallet.write({_id: price.token, value: price.value}) rec_tx = { value: price.value, previous: 'genesis', sender_ref } rec_tx.hash = await vm.hash(rec_tx) await rec_txs.write(rec_tx) }else { await recipient_wallet.update({_id: price.token}, {value: {$inc: price.value}}) let rec_prev_tx = await (await rec_txs.readone()).literal() rec_tx = {value: price.value, previous: await vm.hash(rec_prev_tx), sender_ref} rec_tx.hash = await vm.hash(rec_tx) await rec_txs.write(rec_tx) } return {successful: true, message: 'Transfer completed.'} } } export default Wallet;