babbage-scrypt-helpers
Tools for deploying sCrypt contracts with Babbage SDK
The code is hosted on GitHub and the package is available through NPM.
Installation
npm i babbage-scrypt-helpers
Example Usage
import { deployContract, listContracts, redeemContract } from 'babbage-scrypt-helpers'
import Demo from './src/contracts/Demo.ts'
import { sha256, byteString } from 'scrypt-ts'
await Demo.compile()
const instance = new Demo(sha256(toByteString('hello world', true)))
const deployTX = await deployContract(
instance,
1000,
'Deploy a smart contract',
'tests'
)
console.log('deployed', deployTX.txid)
const contracts = await listContracts('tests', (lockingScript: string) => {
return Demo.fromLockingScript(lockingScript) as Demo
})
console.log('listed', contracts)
const redeemTX = await redeemContract(
contracts[0],
(self: SmartContract): void => {
(self as Demo).unlock(toByteString('hello world', true))
},
'redeem a smart contract'
)
console.log('REDEEMED!!', redeemTX.txid)
API
Links: API, Variables
Variables
Links: API, Variables
Variable: deployContract
deployContract = async (instance: SmartContract, satoshis: number, description: string, basket?: string, metadata?: string, acceptDelayedBroadcast = false): Promise<CreateActionResult> => {
return await createAction({
description,
outputs: [
{
script: instance.lockingScript.toHex(),
satoshis,
basket,
customInstructions: metadata,
},
],
acceptDelayedBroadcast
});
}
Links: API, Variables
Variable: listContracts
listContracts = async <T extends SmartContract>(basket: string, contractHydrator: (lockingScript: string) => T): Promise<ListResult<T>[]> => {
const outputs = await getTransactionOutputs({
basket,
spendable: true,
includeEnvelope: true,
includeCustomInstructions: true,
});
const contracts: ListResult<T>[] = [];
for (let i = 0; i < outputs.length; i++) {
contracts.push({
...outputs[i],
contract: contractHydrator(outputs[i].outputScript),
});
}
return contracts;
}
Links: API, Variables
Variable: redeemContract
redeemContract = async (listResult: ListResult<SmartContract>, redeemTransformer: (self: SmartContract) => void, description: string, customLockTime?: number, customSequenceNumber = 4294967295, outputs?: CreateActionOutput[]): Promise<CreateActionResult> => {
return await createAction({
inputs: {
[listResult.txid]: {
...verifyTruthy(listResult.envelope),
outputsToRedeem: [
{
index: listResult.vout,
unlockingScript: (await listResult.contract
.getUnlockingScript(redeemTransformer))
.toHex(),
sequenceNumber: customSequenceNumber
}
]
}
},
description,
lockTime: customLockTime,
outputs,
});
}
Links: API, Variables
License
The license for the code in this repository is the Open BSV License.