Skip to content

4 extending type

gettocat edited this page Aug 25, 2017 · 1 revision

Create new type

You can add you own type to BitPony. In this version extending types can not be used in stack script and stream.

interface:

bitPony.extend('base58', function () {

    return {
        read: function (buffer) {
            if (typeof buffer == 'string')
                buffer = new Buffer(buffer, 'hex')

            if (buffer.length == 0 || !buffer)
                buffer = new Buffer([0x0]);

            //create obj from buffer

            return obj;

        },
        write: function (obj) {

            //create buffer from 
            return buffer;

        }
    }

});

//usage
var obj = bitPony.base58.read(buffer);
var buff = bitPony.base58.write(obj);

Example

For example we can create var_int vector. var_int cnt + var_int[cnt]

bitPony.extend('vector_var_int', function () {

    return {
        read: function (buffer) {
            if (typeof buffer == 'string')
                buffer = new Buffer(buffer, 'hex')

            if (buffer.length == 0 || !buffer)
                buffer = new Buffer([0x0]);

            var stream = new bitPony.reader(buffer);
            var res = stream.var_int(0);
            var cnt = res.result, arr = [];
            for (var i = 0; i < cnt; i++) {
                res = stream.var_int(res.offset)
                arr.push(res.result);
            }

            return arr;

        },
        write: function (arr) {

            var buffer = new Buffer("");
            var stream = new bitPony.writer(buffer);
            stream.var_int(arr.length, true);
            for (var i in arr) {
                stream.var_int(arr[i], true);
            }

            return stream.getBuffer();

        }
    }

});


var res = bitPony.vector_var_int.write([1, 15, 532, Math.pow(2, 55), 3, 6346736]);//06010ffd1402ff000000000000800003fef0d76000

var res = bitPony.vector_var_int.read("06010ffd1402ff000000000000800003fef0d76000");//[1, 15, 532, Math.pow(2, 55), 3, 6346736]

Example 2

look at page 4.1

Clone this wiki locally