Skip to content

Commit

Permalink
First release
Browse files Browse the repository at this point in the history
  • Loading branch information
lubuzzo committed May 29, 2018
1 parent da69e62 commit 9ba8823
Show file tree
Hide file tree
Showing 7 changed files with 232 additions and 20 deletions.
20 changes: 18 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,18 @@
# proposal
ChainCoin Governance Proposal Generator
Chaincoin Proposal Generator
=================

http://www.chaincoin.org

## How to install
`composer require chaincoin/proposal`

## Start
1. Use the command `composer install`, to install chaincoin/php-api;
2. Update the file vendor/chaincoin/php-api/settings.php with the ip, port, user e password of your rpc-wallet;
3. Done!

## Notes
You'll need some web server (apache/nginx), or you can use php buil-in server


If you would like to contribute feel free to do so! If you have any questions you can find us on the Chaincoin Discord at https://discord.gg/NabdcJ7
11 changes: 11 additions & 0 deletions function/getConfirmations.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';

$chaincoin = new ChainCoin();

$info = $chaincoin->callMethod('gettransaction', array(0 => $_GET['txid']));

if ($chaincoin->getError() == NULL)
echo ($info['confirmations']);
else
echo $chaincoin->getError();
2 changes: 1 addition & 1 deletion function/paymentDate.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
for ($count = 0; $count < $max; $count++) {
$value = (($nextSuper + ($cycle * $count)) - $blocks) * $blockTime;
if ($network == "test")
$miss = date("Y/m/d h:i", strtotime("+" . $value . " Seconds"));
$miss = date("Y/m/d H:i", strtotime("+" . $value . " Seconds"));
else
$miss = date("Y/m/d", strtotime("+" . $value . " Seconds"));
array_push($data, $miss);
Expand Down
21 changes: 21 additions & 0 deletions function/submit.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';

$chaincoin = new ChainCoin();

$command = explode(" ", $_POST['proposal']);

$info = $chaincoin->callMethod($command[0],
array(
0 => $command[1],
1 => $command[2],
2 => $command[3],
3 => $command[4],
4 => $command[5],
5 => $command[6]
));

if ($chaincoin->getError() == NULL)
echo "1";
else
echo $chaincoin->getError();
47 changes: 37 additions & 10 deletions index.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<?php include_once 'settings.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
Expand All @@ -19,57 +20,60 @@
<div class="row">
<div class="col-md-8 col-lg-8 col-sm-12 col-xs-12">

<div class="panel panel-default">
<div class="panel panel-default" id="prepare">
<div class="panel-heading">
<h1 class="panel-title">Create a Proposal</h1>
</div>
<div class="panel-body">
<p>Enter details for your Proposal and click 'Create Proposal'. This will generate a command you can run in your local wallet to prepare the Proposal at a cost of 5 CHC.</p>
<p>Enter details for your Proposal and click 'Create Proposal'. This will generate a command you can run in your local wallet to prepare the Proposal at a cost of <?php echo $collateral; ?> CHC.</p>

<hr>
<form class="" action="#" method="post" onsubmit="return checkAddress();">
<form action="#" method="post" onsubmit="return check();">

<div class="col-md-12">
<div class="form-group">
<label for="proposal-name">Proposal Name</label>
<input type="text" class="form-control" id="proposal-name" placeholder="Proposal Name">
<input type="text" class="form-control" id="proposal-name" placeholder="Proposal Name" required maxlength="40" onblur="checkName();">

<div class="alert alert-danger" role="alert" style="display: none;" id="invalidName"></div>

</div>
</div>

<div class="col-md-12">
<div class="form-group">
<label for="proposal-url">Proposal Description URL:</label>
<input type="url" class="form-control" id="proposal-url" placeholder="https://proposal.chaincoin.org/test">
<input type="url" class="form-control" id="proposal-url" placeholder="https://proposal.chaincoin.org/test" required >
</div>
</div>

<div class="col-md-4">
<div class="form-group">
<label for="payment-date">Payment Date</label>
<select class="form-control" name="payment-date" id="payment-date">
<select class="form-control" name="payment-date" id="payment-date" onchange="totalAmount();">
</select>
</div>
</div>

<div class="col-md-4">
<div class="form-group">
<label for="payment-number">Payments</label>
<select class="form-control" name="payment-number" id="payment-number">
<select class="form-control" name="payment-number" id="payment-number" required onchange="totalAmount()">
</select>
</div>
</div>

<div class="col-md-4">
<div class="form-group">
<label for="payment-amount">Payment Amount:</label>
<input type="number" class="form-control" id="payment-amount" onblur="totalAmount();">
<input type="number" class="form-control" id="payment-amount" onchange="totalAmount();" required >
</div>
</div>

<div class="col-md-12">
<div class="form-group">
<label for="payment-address">Payment Address:</label>
<input type="text" class="form-control" id="payment-address" onblur="checkAddress();">
<input type="text" class="form-control" id="payment-address" onblur="checkAddress();" required >

<div class="alert alert-danger" role="alert" style="display: none;" id="invalidAddress">
<p><strong>Invalid payment address!</strong> Check the given CHC address</p>
Expand All @@ -89,12 +93,35 @@
</div>
</div>

<div class="panel panel-default" id="walletCommand" style="display: none;">
<div class="panel-heading">
<h1 class="panel-title">Wallet Commands</h1>
</div>
<div class="panel-body">
<p>Paste the following into your wallet console to generate the Proposal at a cost of <?php echo $collateral; ?> CHC.</p>

<hr>
<textarea id="textPrepare" readonly class="form-control"></textarea>

<hr>

<form action="#" method="post" onsubmit="return false;">
<div class="form-group">
<label for="txid">Transaction ID:</label>
<p>Paste the resulting transaction id to move to the next step.</p>
<input type="text" class="form-control" id="txid" placeholder="<fee-txid>" onchange="getConfirmations(this.value);">
</div>

</form>

</div>
</div>
</div>

<div class="col-md-3 col-md-offset-1 col-lg-3 col-lg-offset-1 col-sm-12 col-xs-12">
<h2>ChainCoin Budget Proposal</h2>

<p>Generate budget proposal commands you can copy/paste into your Dash wallet to prepare a budget proposal and submit it to the network.</p>
<p>Generate budget proposal commands you can copy/paste into your wallet to prepare a budget proposal and submit it to the network.</p>

<p>
<svg class="octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg>
Expand Down
138 changes: 132 additions & 6 deletions layouts/functions.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
<script>
jQuery.ajaxSetup({async:false});
var superBlocksList = [];
var validAddress;
function checkAddress() {
$.get(
"function/checkAddress.php",
Expand All @@ -9,35 +14,156 @@ function(data) {
if ((data == "false")) {
$("#payment-address").css('border', '2px solid red');
$("#invalidAddress").css('display', 'block');
validAddress = false;
return false;
} else {
$("#payment-address").css('border', '1px solid #ccc');
$("#invalidAddress").css('display', 'none');
validAddress = true;
return true;
}
//console.log(data);
}
);
return false;
}
function totalAmount() {
$("#totalAmount").html( ($("#payment-number").val() * $("#payment-amount").val()) + " CHC" );
if ($("#payment-number").val() && $("#payment-amount").val() && $("#payment-date"))
$("#totalAmount").html( ($("#payment-number").val() * $("#payment-amount").val()) + " CHC with a final payment at " + superBlocksList[(parseInt($("#payment-number").val()) + parseInt($("#payment-date").val()))] );
}
function superBlocks() {
$.get(
"function/paymentDate.php",
function(data) {
$.each(JSON.parse(data), function(index, value) {
$("#payment-date").append("<option value=\"\">" + value + "</option>");
$("#payment-number").append("<option value=\"\">" + (index+1) + " Payments</option>");
superBlocksList.push(value);
$("#payment-date").append("<option value="+(index)+">" + value + "</option>");
$("#payment-number").append("<option value="+(index+1)+">" + (index+1) + " Payments</option>");
});
}
);
return false;
// Debug
// $.each(superBlocksList, function(index, value) {
// console.log(index + " => " + Math.round((new Date(value)).getTime()/1000));
// });
}
$(document).ready(function() {
superBlocks();
});
function checkName() {
if ($("#proposal-name").val().length > 40) {
$("#invalidName").html("<p><b>Invalid name!</b> The length maximum is 40 characters</p>");
$("#invalidName").css('display', 'block');
return false;
} else {
//TODO: check for duplicated proposal-name (?)
}
$("#invalidName").css('display', 'none');
return true;
}
function checkAmount() {
return Number.isInteger(parseInt($("#payment-amount").val()));
}
function a2hex(str) {
var arr = [];
for (var i = 0, l = str.length; i < l; i ++) {
var hex = Number(str.charCodeAt(i)).toString(16);
arr.push(hex);
}
return arr.join('');
}
function textAreaAdjust(o) {
o.style.height = (5+o.scrollHeight)+"px";
}
function check() {
if (checkName() && validAddress && checkAmount()) {
$("#prepare").css('display', 'none');
$("#walletCommand").css('display', 'block');
var d = new Date();
var seconds = Math.round(d.getTime() / 1000);
var end = new Date(superBlocksList[(parseInt($("#payment-number").val()) + parseInt($("#payment-date").val()))]);
var endEpoch = Math.round(end.getTime() / 1000);
var start = new Date(superBlocksList[parseInt($("#payment-date").val())]);
var startEpoch = Math.round(start.getTime() / 1000);
var textToHex = "[[\"proposal\",{\"end_epoch\":"+endEpoch+",\"name\":\""+$("#proposal-name").val()+"\",\"payment_address\":\""+$("#payment-address").val()+"\",\"payment_amount\":"+$("#payment-amount").val()+",\"start_epoch\":"+startEpoch+",\"type\":1,\"url\":\""+$("#proposal-url").val()+"\"}]]";
$("#textPrepare").html("gobject prepare 0 1 " + seconds + " " + a2hex(textToHex));
textAreaAdjust(document.getElementById('textPrepare'));
return false;
} else {
return false;
}
}
var confirmed = false;
var txid;
function getConfirmations(txid) {
txid = txid;
window.setInterval(function(){
if (!(confirmed)) {
$.get(
"function/getConfirmations.php",
{
txid: txid
},
function(data) {
if (parseInt(data) > 0) {
confirmed = true;
finish($("#textPrepare").html(), txid);
return;
}
}
);
}
}, 30000);
return;
}
function finish(prepare, txid) {
$("#submitCommand").css('display', 'block');
prepare = prepare.replace("prepare", "submit");
prepare = prepare + " " + txid;
submitProposal(prepare);
}
function submitProposal(command) {
$.post(
"function/submit.php",
{
proposal: command
},
function(data) {
if (data == "1")
alert("Done!");
else {
console.log(data);
alert("Error. Copy your browser console content and open an issue at GitHub")
}
}
);
}
</script>
13 changes: 12 additions & 1 deletion settings.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
<?php
##Block time in seconds

/*
The default value is the ChainCoin (CHC) values to create a proposal
*/

#Block time in seconds
$blockTime = 90;

#Collateral amount
$collateral = 50;

#Minimum of Confirmations to the transaction
$confirmations = 1;

0 comments on commit 9ba8823

Please sign in to comment.