Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions functions/create-safedata-script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
const BufferWriter = require('../classes/buffer-writer')
const writePushData = require('./write-push-data')

function createSafeDataScript (data = []) {
const writer = new BufferWriter()
writer.write([0]) // OP_FALSE
writer.write([106]) // OP_RETURN

try {
const datas = Array.isArray(data) ? data : [data];
datas.forEach(data => writePushData(writer, new Buffer.from(data)))
} catch (err) {
throw new Error('invalid data ', err)
}

return writer.toBuffer()
}

module.exports = createSafeDataScript
1 change: 1 addition & 0 deletions functions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module.exports = {
calculateTxid: require('./calculate-txid'),
createP2PKHLockScript: require('./create-p2pkh-lock-script'),
createP2PKHUnlockScript: require('./create-p2pkh-unlock-script'),
createSafeDataScript: require('./create-safedata-script'),
decodeAddress: require('./decode-address'),
decodeASM: require('./decode-asm'),
decodeBase58Check: require('./decode-base58-check'),
Expand Down
39 changes: 39 additions & 0 deletions test/functions/create-safedata-script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const { describe, it } = require('mocha')
const { expect } = require('chai')
const nimble = require('../env/nimble')
const { createSafeDataScript } = nimble.functions
const bsv = require('bsv')

describe('safe data script', () => {
it('script with no values', () => {
const data = []
const emptyString = ''
const bsvScript = bsv.Script.buildSafeDataOut(data).toBuffer()
const bsvScript2 = bsv.Script.buildSafeDataOut(emptyString).toBuffer()
const nimbleScript = createSafeDataScript(data)
const nimbleScript2 = createSafeDataScript(emptyString)
const nimbleScript3 = createSafeDataScript()
expect(Array.from(bsvScript)).to.deep.equal(Array.from(nimbleScript))
expect(Array.from(bsvScript2)).to.deep.equal(Array.from(nimbleScript2))
expect(Array.from(bsvScript)).to.deep.equal(Array.from(nimbleScript3))
})

it('script from single pushdata', () => {
const data = 'Nimble 42'
const bsvSCript = bsv.Script.buildSafeDataOut(data).toBuffer()
const nimbleScript = createSafeDataScript(data)
expect(Array.from(bsvSCript)).to.deep.equal(Array.from(nimbleScript))
})

it('script from pushdata array', () => {
const data = ['Nimble', '42']
const bsvSCript = bsv.Script.buildSafeDataOut(data).toBuffer()
const nimbleScript = createSafeDataScript(data)
expect(Array.from(bsvSCript)).to.deep.equal(Array.from(nimbleScript))
})

it('throws if not valid data', () => {
const data = {}
expect(() => createSafeDataScript(data)).to.throw('invalid data')
})
})
1 change: 1 addition & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ describe('functions', () => {
require('./functions/calculate-txid')
require('./functions/create-p2pkh-lock-script')
require('./functions/create-p2pkh-unlock-script')
require('./functions/create-safedata-script')
require('./functions/decode-address')
require('./functions/decode-asm')
require('./functions/decode-base64')
Expand Down