From a3fa1e52ba0c8a788088bc6f72c67f0872c63974 Mon Sep 17 00:00:00 2001 From: Nihar Date: Tue, 18 Apr 2017 01:13:31 -0700 Subject: [PATCH 1/5] ability to use row to get additional field and get contracts returns number of contracts. Still can't see the iright additional field. --- smartcontract/contracts/SmartContract.sol | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/smartcontract/contracts/SmartContract.sol b/smartcontract/contracts/SmartContract.sol index 505ea33..2c6d476 100644 --- a/smartcontract/contracts/SmartContract.sol +++ b/smartcontract/contracts/SmartContract.sol @@ -61,11 +61,11 @@ contract SmartContract { contracts[_cid].ef1.push(_extraField); return true; } - function getFieldByContractID(uint _cid) constant returns (bytes32[]) { + function getFieldByContractID(uint _cid) constant returns (bytes32) { if (_cid > contracts.length) { throw; } - return contracts[_cid].ef1; + return contracts[_cid].ef1[_cid]; } function setBidTableContractId(uint _cid) returns (bool success) { @@ -86,7 +86,7 @@ contract SmartContract { bidMap[cid].push(newBid); return true; } - function getContracts() constant returns (uint[], bytes32[], uint[], uint[], uint[], bytes32[]) { + function getContracts() constant returns (uint[], bytes32[], uint[], uint[], uint[], bytes32[], uint) { uint length = contracts.length; uint[] memory contractId = new uint[](length); bytes32[] memory asset = new bytes32[](length); @@ -106,14 +106,13 @@ contract SmartContract { targetPrice[i] = currentContract.targetPrice; targetTime[i] = currentContract.targetTime; extraField1[i] = currentContract.extra; - /*for (uint j = 0; j < currentContract.ef1.length; j++) { additionalInfo[i][j] = currentContract.ef1[j]; }*/ //supplier[i] = currentContract.supplier; /*date[i] = currentContract.date;*/ } - return (contractId, asset, qty, targetPrice, targetTime, extraField1); + return (contractId, asset, qty, targetPrice, targetTime, extraField1, length); } function getBids() constant returns (uint[], bytes32[], uint[], uint[]){ uint length = bidMap[bidTableContractId].length; From 88ee0aa91f6edfd45ccbb3fe6eb7df8907536a6a Mon Sep 17 00:00:00 2001 From: Nihar Date: Tue, 18 Apr 2017 10:10:46 -0700 Subject: [PATCH 2/5] broken now --- smartcontractui/src/components/EthereumSetup.js | 2 +- smartcontractui/src/containers/ContractTable.js | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/smartcontractui/src/components/EthereumSetup.js b/smartcontractui/src/components/EthereumSetup.js index e7631da..39c1564 100644 --- a/smartcontractui/src/components/EthereumSetup.js +++ b/smartcontractui/src/components/EthereumSetup.js @@ -3,7 +3,7 @@ import Web3 from 'web3'; const ETHEREUM_CLIENT = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) var smartContractABI = [{"constant":false,"inputs":[{"name":"_cid","type":"uint256"},{"name":"_extraField","type":"bytes32"}],"name":"addField","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_asset","type":"bytes32"},{"name":"_quantity","type":"uint256"},{"name":"_targetPrice","type":"uint256"},{"name":"_targetTime","type":"uint256"}],"name":"addContract","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"contracts","outputs":[{"name":"contractId","type":"uint256"},{"name":"asset","type":"bytes32"},{"name":"quantity","type":"uint256"},{"name":"targetPrice","type":"uint256"},{"name":"targetTime","type":"uint256"},{"name":"extra","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_cid","type":"uint256"}],"name":"getFieldByContractID","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getBids","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getContracts","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cid","type":"uint256"}],"name":"setBidTableContractId","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"cid","type":"uint256"},{"name":"_supplier","type":"bytes32"},{"name":"_price","type":"uint256"},{"name":"_bidTime","type":"uint256"}],"name":"bid","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}] -var smartContractAddress = '0x1c30ae871c77655a3764d1a6738b99c3f33ac0ec'; +var smartContractAddress = '0xc9aa33e5d7c90d1413721ab680c3b3c66b773bc4'; const smartContract = ETHEREUM_CLIENT.eth.contract(smartContractABI).at(smartContractAddress); export {ETHEREUM_CLIENT, smartContract}; diff --git a/smartcontractui/src/containers/ContractTable.js b/smartcontractui/src/containers/ContractTable.js index 430ffdb..c34a85b 100644 --- a/smartcontractui/src/containers/ContractTable.js +++ b/smartcontractui/src/containers/ContractTable.js @@ -37,7 +37,15 @@ class ContractTable extends Component { componentDidMount(){ setInterval(function() { var data = smartContract.getContracts() - var info = smartContract.getFieldByContractID(0) + var i; + var info = + for(i=0; i 0){ + info = info.concat(','); + } + info = info.concat(smartContract.getFieldByContractID(i)); + } + this.setState({ contractId: String(data[0]).split(','), asset: String(data[1]).split(','), @@ -45,9 +53,9 @@ class ContractTable extends Component { tPrice: String(data[3]).split(','), tTime: String(data[4]).split(','), extra: String(data[5]).split(','), - ef1: String(info), + ef1: String(info).split(','), interval: this.state.interval + 1 - }) + }); console.log(ETHEREUM_CLIENT.toAscii(this.state.ef1)) this.render() }.bind(this), 5000); From 9911e968da4c1966af259ef6c29037297521ae06 Mon Sep 17 00:00:00 2001 From: Nihar Date: Tue, 18 Apr 2017 10:18:26 -0700 Subject: [PATCH 3/5] working now --- smartcontractui/src/components/EthereumSetup.js | 2 +- smartcontractui/src/containers/ContractTable.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/smartcontractui/src/components/EthereumSetup.js b/smartcontractui/src/components/EthereumSetup.js index 39c1564..b13aa79 100644 --- a/smartcontractui/src/components/EthereumSetup.js +++ b/smartcontractui/src/components/EthereumSetup.js @@ -3,7 +3,7 @@ import Web3 from 'web3'; const ETHEREUM_CLIENT = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) var smartContractABI = [{"constant":false,"inputs":[{"name":"_cid","type":"uint256"},{"name":"_extraField","type":"bytes32"}],"name":"addField","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_asset","type":"bytes32"},{"name":"_quantity","type":"uint256"},{"name":"_targetPrice","type":"uint256"},{"name":"_targetTime","type":"uint256"}],"name":"addContract","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"contracts","outputs":[{"name":"contractId","type":"uint256"},{"name":"asset","type":"bytes32"},{"name":"quantity","type":"uint256"},{"name":"targetPrice","type":"uint256"},{"name":"targetTime","type":"uint256"},{"name":"extra","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_cid","type":"uint256"}],"name":"getFieldByContractID","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getBids","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getContracts","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cid","type":"uint256"}],"name":"setBidTableContractId","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"cid","type":"uint256"},{"name":"_supplier","type":"bytes32"},{"name":"_price","type":"uint256"},{"name":"_bidTime","type":"uint256"}],"name":"bid","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}] -var smartContractAddress = '0xc9aa33e5d7c90d1413721ab680c3b3c66b773bc4'; +var smartContractAddress = '0xf9d246f266776ef5899ad671d9bc6cf7bdacfcdd'; const smartContract = ETHEREUM_CLIENT.eth.contract(smartContractABI).at(smartContractAddress); export {ETHEREUM_CLIENT, smartContract}; diff --git a/smartcontractui/src/containers/ContractTable.js b/smartcontractui/src/containers/ContractTable.js index c34a85b..d4c2377 100644 --- a/smartcontractui/src/containers/ContractTable.js +++ b/smartcontractui/src/containers/ContractTable.js @@ -38,7 +38,7 @@ class ContractTable extends Component { setInterval(function() { var data = smartContract.getContracts() var i; - var info = + var info = '' for(i=0; i 0){ info = info.concat(','); From a5e55a706811391c35ec9821201692c92c44bd9d Mon Sep 17 00:00:00 2001 From: Nihar Date: Mon, 24 Apr 2017 15:46:44 -0700 Subject: [PATCH 4/5] gets correct additional field --- smartcontract/contracts/SmartContract.sol | 7 +++++-- smartcontractui/src/components/EthereumSetup.js | 2 +- smartcontractui/src/containers/ContractTable.js | 14 ++++++++++---- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/smartcontract/contracts/SmartContract.sol b/smartcontract/contracts/SmartContract.sol index 505ea33..e678ae9 100644 --- a/smartcontract/contracts/SmartContract.sol +++ b/smartcontract/contracts/SmartContract.sol @@ -61,11 +61,11 @@ contract SmartContract { contracts[_cid].ef1.push(_extraField); return true; } - function getFieldByContractID(uint _cid) constant returns (bytes32[]) { + function getFieldByContractID(uint _cid) constant returns (bytes32[], uint) { if (_cid > contracts.length) { throw; } - return contracts[_cid].ef1; + return (contracts[_cid].ef1, _cid); } function setBidTableContractId(uint _cid) returns (bool success) { @@ -130,4 +130,7 @@ contract SmartContract { } return (contractIds, suppliers, prices, timesToComplete); } + /*function returnArg(uint arg) constant returns (bytes32){ + return arg; + }*/ } diff --git a/smartcontractui/src/components/EthereumSetup.js b/smartcontractui/src/components/EthereumSetup.js index e7631da..8221960 100644 --- a/smartcontractui/src/components/EthereumSetup.js +++ b/smartcontractui/src/components/EthereumSetup.js @@ -3,7 +3,7 @@ import Web3 from 'web3'; const ETHEREUM_CLIENT = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) var smartContractABI = [{"constant":false,"inputs":[{"name":"_cid","type":"uint256"},{"name":"_extraField","type":"bytes32"}],"name":"addField","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_asset","type":"bytes32"},{"name":"_quantity","type":"uint256"},{"name":"_targetPrice","type":"uint256"},{"name":"_targetTime","type":"uint256"}],"name":"addContract","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"contracts","outputs":[{"name":"contractId","type":"uint256"},{"name":"asset","type":"bytes32"},{"name":"quantity","type":"uint256"},{"name":"targetPrice","type":"uint256"},{"name":"targetTime","type":"uint256"},{"name":"extra","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_cid","type":"uint256"}],"name":"getFieldByContractID","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getBids","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getContracts","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cid","type":"uint256"}],"name":"setBidTableContractId","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"cid","type":"uint256"},{"name":"_supplier","type":"bytes32"},{"name":"_price","type":"uint256"},{"name":"_bidTime","type":"uint256"}],"name":"bid","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}] -var smartContractAddress = '0x1c30ae871c77655a3764d1a6738b99c3f33ac0ec'; +var smartContractAddress = '0x9a7eb428c2fe95883a26a50612732574621c9ab4'; const smartContract = ETHEREUM_CLIENT.eth.contract(smartContractABI).at(smartContractAddress); export {ETHEREUM_CLIENT, smartContract}; diff --git a/smartcontractui/src/containers/ContractTable.js b/smartcontractui/src/containers/ContractTable.js index 430ffdb..32fca40 100644 --- a/smartcontractui/src/containers/ContractTable.js +++ b/smartcontractui/src/containers/ContractTable.js @@ -7,7 +7,13 @@ import 'react-table/react-table.css' import ContractModal from './ContractModal'; import AddFieldModal from './AddFieldModal'; - +function hex2a(hexx) { + var hex = hexx.toString();//force conversion + var str = ''; + for (var i = 0; i < hex.length; i += 2) + str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + return str; +} class ContractTable extends Component { constructor(props) { super(props) @@ -37,7 +43,7 @@ class ContractTable extends Component { componentDidMount(){ setInterval(function() { var data = smartContract.getContracts() - var info = smartContract.getFieldByContractID(0) + // var info = smartContract.getFieldByContractID(0) this.setState({ contractId: String(data[0]).split(','), asset: String(data[1]).split(','), @@ -45,7 +51,7 @@ class ContractTable extends Component { tPrice: String(data[3]).split(','), tTime: String(data[4]).split(','), extra: String(data[5]).split(','), - ef1: String(info), + // ef1: String(info), interval: this.state.interval + 1 }) console.log(ETHEREUM_CLIENT.toAscii(this.state.ef1)) @@ -97,7 +103,7 @@ class ContractTable extends Component { SubComponent={(row) => { return (
- Additional Field: {ETHEREUM_CLIENT.toAscii(this.state.ef1)} + Additional Field: {hex2a(smartContract.getFieldByContractID(row.index))}
) }}/> From f2bcd8e40793917b9943d6c80010b78a604494db Mon Sep 17 00:00:00 2001 From: Nihar Date: Mon, 24 Apr 2017 18:36:08 -0700 Subject: [PATCH 5/5] everything works --- smartcontract/contracts/SmartContract.sol | 3 +++ smartcontractui/src/components/EthereumSetup.js | 2 +- smartcontractui/src/containers/ContractTable.js | 8 +++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/smartcontract/contracts/SmartContract.sol b/smartcontract/contracts/SmartContract.sol index 2ccb877..9bc02e7 100644 --- a/smartcontract/contracts/SmartContract.sol +++ b/smartcontract/contracts/SmartContract.sol @@ -59,6 +59,9 @@ contract SmartContract { bytes32 additional = "Additional Info"; contracts[_cid].extra = additional; contracts[_cid].ef1.push(_extraField); + contracts[_cid].ef1.push("\0"); + contracts[_cid].ef1.push(", "); + contracts[_cid].ef1.push("\0"); return true; } function getFieldByContractID(uint _cid) constant returns (bytes32[], uint) { diff --git a/smartcontractui/src/components/EthereumSetup.js b/smartcontractui/src/components/EthereumSetup.js index 177c9b0..c51cf7a 100644 --- a/smartcontractui/src/components/EthereumSetup.js +++ b/smartcontractui/src/components/EthereumSetup.js @@ -4,7 +4,7 @@ const ETHEREUM_CLIENT = new Web3(new Web3.providers.HttpProvider("http://localho var smartContractABI = [{"constant":false,"inputs":[{"name":"_cid","type":"uint256"},{"name":"_extraField","type":"bytes32"}],"name":"addField","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_asset","type":"bytes32"},{"name":"_quantity","type":"uint256"},{"name":"_targetPrice","type":"uint256"},{"name":"_targetTime","type":"uint256"}],"name":"addContract","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"contracts","outputs":[{"name":"contractId","type":"uint256"},{"name":"asset","type":"bytes32"},{"name":"quantity","type":"uint256"},{"name":"targetPrice","type":"uint256"},{"name":"targetTime","type":"uint256"},{"name":"extra","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_cid","type":"uint256"}],"name":"getFieldByContractID","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getBids","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getContracts","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cid","type":"uint256"}],"name":"setBidTableContractId","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"cid","type":"uint256"},{"name":"_supplier","type":"bytes32"},{"name":"_price","type":"uint256"},{"name":"_bidTime","type":"uint256"}],"name":"bid","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}] -var smartContractAddress = '0x9a7eb428c2fe95883a26a50612732574621c9ab4'; +var smartContractAddress = '0x8e19fa4266d45623e2d9625f1e367d4674f509af'; const smartContract = ETHEREUM_CLIENT.eth.contract(smartContractABI).at(smartContractAddress); export {ETHEREUM_CLIENT, smartContract}; diff --git a/smartcontractui/src/containers/ContractTable.js b/smartcontractui/src/containers/ContractTable.js index e3fff68..0892ec3 100644 --- a/smartcontractui/src/containers/ContractTable.js +++ b/smartcontractui/src/containers/ContractTable.js @@ -8,10 +8,12 @@ import ContractModal from './ContractModal'; import AddFieldModal from './AddFieldModal'; function hex2a(hexx) { - var hex = hexx.toString();//force conversion + var hex = hexx.toString();//force conversion var str = ''; - for (var i = 0; i < hex.length; i += 2) - str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + for (var i = 0; i < hex.length; i += 2){ + var add = String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + str += add; + } return str; } class ContractTable extends Component {