Coins
coins
is a cryptocurrency middleware for Lotion.
It gives you a fully-functional token out-of-the-box, but can also act as a framework for more complex functionality (e.g. smart contracts). ERC20 tokens are so 2017!
Installation
coins
requires node v7.6.0 or higher.
$ npm install coins
Usage
Basic coin usage
First, generate an address for yourself:
$ npx coins
Your Address:
338sjLktF4XzRfz25oyH11jVYhZMokbsr
Your wallet seed is stored at "~/.coins",
make sure to keep it secret!
Add the middleware to your lotion app, and be sure to give yourself some coins!
app.js
let lotion = require('lotion')
let coins = require('coins')
let app = lotion({
devMode: true
})
app.use(coins({
name: 'kittycoin',
initialBalances: {
'BD3EaPRLquuHx7DMcSQ2YX54frnSEZ3YD': 21000000
}
}))
app.listen(3000).then(({ GCI }) => {
console.log('App GCI:', GCI)
})
Then build a client:
wallet.js
:
let lotion = require('lotion')
let coins = require('coins')
let client = await lotion.connect(APP_GCI)
let wallet = coins.wallet(client)
let address = wallet.address()
console.log(address)
let balance = await wallet.balance()
console.log(balance)
let result = await wallet.send('04oDVBPIYP8h5V1eC1PSc5JU6Vo', 5)
console.log(result)
Writing your own advanced coin handler
chain.js
:
let coins = require('coins')
let lotion = require('lotion')
let app = lotion({})
app.use(coins({
name: 'testcoin',
initialBalances: {
'judd': 10,
'matt': 10
},
handlers: {
'my-module': {
onInput(input, tx, state) {
if(isNotValid(input)) {
throw Error('this input isn\'t valid!')
}
state[input.senderAddress] -= input.amount
},
onOutput(output, tx, state) {
state[output.receiverAddress] = (state[output.receiverAddress] || 0) + output.amount
}
}
}
}
}))
app.listen(3000)
run node chain.js
, then write
client.js
:
let lotion = require('lotion')
let client = await lotion.connect(YOUR_APP_GCI)
let result = await client.send({
from: [
{ amount: 4, type: 'my-module', senderAddress: 'judd' }
],
to: [
{ amount: 4, type: 'my-module', receiverAddress: 'matt' }
]
})
console.log(result)
License
MIT