UNPKG

@gohelpfund/helpcore-lib

Version:

A pure and powerful JavaScript Help library.

162 lines (124 loc) 5.04 kB
# Governance Object / Proposal - [GovObject](#governance-object) - [`new GovObject([govObjectData])`](#new-govobjectgovobjectdata) - [Methods](#methods) - [dataHex](#datahex) - [fromObject](#fromobject) - [fromString](#fromstring) - [checkedSerialize](#checkedserialize) - [serialize](#serialize) - [inspect](#inspect) - [toBuffer](#tobuffer) - [fromBuffer](#frombuffer) - [shallowCopy](#shallowcopy) - [Governance Object Creation](#governance-object-creation) - [Governance Object Types](#govobject-types) ## Governance Object A Governance Object (or "govObject") is a generic structure introduced in Dash Core v12.1 to allow for the creation of Budget Proposals, Triggers, and Watch Dogs. Class inheritance has been utilized to extend this generic object into a "Proposal" which is outlined throughout the remainder of this document. ### `new GovObject([govObjectData])` Creates a new `GovObject` object where: - `govObjectData` - optional data (allowed types are `json`, `jsonString`, `hex`, `buffer`, `GovObject`) ### Methods #### `dataHex` Returns a dataHex representation (see above) #### `fromObject` Allow to create a govObj from a json or stringifiedJSON obj #### `fromString` Allow to create a govObj from a hex string #### `checkedSerialize` Return a hex string that can be used in dashd CLI #### `serialize` Return a hex string #### `inspect` Returns a representation of the object #### `toBuffer` Return a buffer #### `fromBuffer` Allow to create a govObject from a buffer #### `shallowCopy` Allow to shallowCopy from another govObject ## Governance Object Creation The following would create a blank govObject ```javascript // instantiate a new govObject instance var govObject = new GovObject(); ``` Budget Proposals can be created from a valid JSON object (stringified or not) ```javascript var jsonProposal = { name: "My First GovObject", start_epoch: 1483228800, end_epoch: 1483747200, payment_address: 'yXGeNPQXYFXhLAN1ZKrAjxzzBnZ2JZNKnh', payment_amount: 10, type: 1, url: "http://www.dash.org/proposal/first_proposal" }; // Will instantiate the govObject given the json passed as arg for fromObject govObject = govObject.fromObject(jsonProposal); var govObject = new GovObject().fromObject(jsonProposal); // It's worth mentioning that fromObject can also be a valid stringified json. var govObject = new GovObject().fromObject(JSON.stringify(jsonProposal)); ``` Budget Proposals can be instantiated from a Buffer ```javascript // Allow creation of a new object from a given buffer var fromBuff = new GovObject(govObjBuffer); // Or var fromBuff = new GovObject().fromBuffer(govObjBuffer); // And from a hex string var fromString = new GovObject("7b226e616d65223a224..."); // or var fromString = new GovObject().fromString("7b226e616d65223a224...") ``` You can display a hex-encoded representation of a Budget Proposal with a simple "toString()" ```javascript var fromString = new GovObject("7b226e616d65223a224..."); var hexString = fromString.toString(); // or var hexString = fromString.serialize(); ``` Logging the object will also return a hex-encoded representation of the object ```javascript var fromString = new GovObject("7b226e616d65223a224..."); console.log(fromString) // <GovObject: 7b226e616d65223a224...> // Or using the method fromString.inspect(); ``` You could shallowcopy a first govObj into a second one ```javascript proposal.url = "http://dash.org/badUrl" var shallowCopyProposal = proposal.shallowCopy(); proposal.url = "http://dash.org/fixedUrl" console.log(proposal.url!==shallowCopyProposal.url) // return true as it's a copy console.log(proposal!==shallowCopyProposal) // return true ``` Finally you are able to get the dataHex from the object ```javascript var fromString = new GovObject("7b226e616d65223a224..."); // Give a stringified json [['proposal',{name:"My First GovObject",....}]] fromString.dataHex() // You could get back the given JSON object by doing so var JSONObject = JSON.parse(fromString.dataHex()); ``` ## GovObject Types: Each of these types are inherited from govObject allowing the same methods to be callable. * Proposal `type:1`: Allow to create a proposal which inherit govObject method and overwrite them when needed ```javascript var jsonProposal = { name: "My First Proposal", start_epoch: startDate, end_epoch: endDate, payment_address: 'yXGeNPQXYFXhLAN1ZKrAjxzzBnZ2JZNKnh', payment_amount: 10, type: 1, url: "http://www.dash.org" }; var proposal = new Proposal(); // create a new proposal from a stringified JSON object proposal = proposal.fromObject(JSON.stringify(jsonProposal)); // As proposal inherits govObject var shallowCopy = proposal.shallowCopy(); // Return a hex equivalent of the proposal var hexProposal = proposal.serialize() ```