UNPKG

parkingsv-contract

Version:

ParkingSV library

46 lines (37 loc) 1.59 kB
const { expect } = require('chai'); const { bsv, buildContractClass, toHex, getPreimage, num2bin, PubKey, Bytes } = require('scryptlib'); const { inputIndex, inputSatoshis, tx, compileContract, DataLen } = require('../../helper'); // make a copy since it will be mutated const tx_ = bsv.Transaction.shallowCopy(tx) describe('Test sCrypt contract TokenSale In Javascript', () => { let tokenSale let getPreimageAfterPurchase const privateKey1 = new bsv.PrivateKey.fromRandom('testnet') const publicKey1 = bsv.PublicKey.fromPrivateKey(privateKey1) const numTokens = 21 const tokenPriceInSatoshis = 100 before(() => { const TokenSale = buildContractClass(compileContract('tokenSale.scrypt')) tokenSale = new TokenSale(tokenPriceInSatoshis) // initial empty state tokenSale.dataLoad = '' getPreimageAfterPurchase = (publicKey) => { const newLockingScriptHex = tokenSale.lockingScript.toHex() + toHex(publicKey) + num2bin(numTokens, DataLen) tx_.addOutput(new bsv.Transaction.Output({ script: bsv.Script.fromHex(newLockingScriptHex), satoshis: inputSatoshis + numTokens * tokenPriceInSatoshis })) return getPreimage(tx_, tokenSale.lockingScript.toASM(), inputSatoshis) } }); it('should succeed when publicKey1 buys tokens', () => { const preimage = getPreimageAfterPurchase(publicKey1) expect( tokenSale.buy( new PubKey(toHex(publicKey1)), numTokens, new Bytes(toHex(preimage)) ).verify( { tx: tx_, inputIndex, inputSatoshis }) ).to.equal(true); }); });