@gohelpfund/helpcore-lib
Version:
A pure and powerful JavaScript Help library.
162 lines (124 loc) • 5.04 kB
Markdown
# 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()
```