rchain-token
Version:
Fungibles and non-fungibles tokens on the RChain blockchain
32 lines (29 loc) • 1.2 kB
JavaScript
module.exports.createPursesTerm = (payload) => {
const ids = Object.keys(payload.purses);
ids.forEach((id) => {
payload.purses[id].data = payload.data[id] || null;
});
let rholang = `new ${ids.map((id, i) => 'channel' + i)} in {`;
ids.forEach((id, i) => {
rholang +=
'\n' +
`superKey!(("CREATE_PURSE", ${JSON.stringify(payload.purses[id]).replace(
new RegExp(': null|:null', 'g'),
': Nil'
)}, *channel${i})) |`;
});
rholang += '\n';
rholang += `for (${ids
.map((p, i) => '@value' + i + ' <- channel' + i)
.join('; ')}) {\n`;
rholang += ` // OP_CREATE_PURSES_COMPLETED_BEGIN\n stdout!("purses created, check results to see successes/failures") |
basket!({ "status": "completed", "results": {}${ids
.map((p, i) => `.union({ "${p}": value${i} })`)
.join('')}}) // OP_CREATE_PURSES_COMPLETED_END\n`;
rholang += `}\n}`;
return `new basket, entryCh, readCh, stdout(\`rho:io:stdout\`), deployerId(\`rho:rchain:deployerId\`), lookup(\`rho:registry:lookup\`) in {
for (superKey <<- @(*deployerId, "rchain-token-contract", "${payload.masterRegistryUri}", "${payload.contractId}")) {
${rholang}
}
}`;
};