mirror of
https://github.com/status-im/visual-identity.git
synced 2025-02-16 06:27:14 +00:00
move to using go contract + go server
based on contracts found here: https://github.com/loomnetwork/tiles-chain
This commit is contained in:
parent
3f409ae7af
commit
2c948dbdac
45
app/client_contractgo.js
Normal file
45
app/client_contractgo.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import {
|
||||||
|
NonceTxMiddleware, SignedTxMiddleware, Client,
|
||||||
|
Contract, Address, LocalAddress, CryptoUtils
|
||||||
|
} from 'loom-js'
|
||||||
|
|
||||||
|
import { TileMapState, TileMapTx } from './proto/dots_pb'
|
||||||
|
|
||||||
|
export default class ContractClient {
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
async createContract() {
|
||||||
|
const privateKey = CryptoUtils.generatePrivateKey()
|
||||||
|
const publicKey = CryptoUtils.publicKeyFromPrivateKey(privateKey)
|
||||||
|
|
||||||
|
const client = new Client(
|
||||||
|
'default',
|
||||||
|
'wss://draw.status.im/websocket',
|
||||||
|
'wss://draw.status.im/queryws',
|
||||||
|
)
|
||||||
|
// required middleware
|
||||||
|
client.txMiddleware = [
|
||||||
|
new NonceTxMiddleware(publicKey, client),
|
||||||
|
new SignedTxMiddleware(privateKey)
|
||||||
|
]
|
||||||
|
// address of the `TileChain` smart contract on the Loom DAppChain
|
||||||
|
const contractAddr = await client.getContractAddressAsync('TileChain')
|
||||||
|
|
||||||
|
this.callerAddress = new Address(client.chainId, LocalAddress.fromPublicKey(publicKey))
|
||||||
|
this.contract = new Contract({
|
||||||
|
contractAddr,
|
||||||
|
callerAddr: this.callerAddress,
|
||||||
|
client
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async setTileMapState(data) {
|
||||||
|
const setTileMapState = new TileMapTx()
|
||||||
|
setTileMapState.setData(data)
|
||||||
|
await this.contract.callAsync('SetTileMapState', setTileMapState)
|
||||||
|
}
|
||||||
|
|
||||||
|
async getTileMapState() {
|
||||||
|
return await this.contract.staticCallAsync('GetTileMapState', new TileMapState(), new TileMapState())
|
||||||
|
}
|
||||||
|
}
|
@ -322,6 +322,7 @@ class SketchFieldDemo extends React.Component {
|
|||||||
id='lineColor' color={this.state.lineColor}
|
id='lineColor' color={this.state.lineColor}
|
||||||
onChange={(color) => this.setState({lineColor: color.hex})}/>
|
onChange={(color) => this.setState({lineColor: color.hex})}/>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
<Button onClick={this.props.request}>Get Content</Button>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
18
app/dapp.js
18
app/dapp.js
@ -5,7 +5,8 @@ import EmbarkJS from 'Embark/EmbarkJS';
|
|||||||
import SNT from 'Embark/contracts/SNT';
|
import SNT from 'Embark/contracts/SNT';
|
||||||
import Web3Render from './components/standard/Web3Render';
|
import Web3Render from './components/standard/Web3Render';
|
||||||
import DrawField from './components/draw/DrawField';
|
import DrawField from './components/draw/DrawField';
|
||||||
import ContractClient, { createContract } from './contract_client'
|
//import ContractClient, { createContract } from './contract_client'
|
||||||
|
import ContractClient from './client_contractgo'
|
||||||
window['SNT'] = SNT;
|
window['SNT'] = SNT;
|
||||||
|
|
||||||
import './dapp.css';
|
import './dapp.css';
|
||||||
@ -34,7 +35,8 @@ class App extends React.Component {
|
|||||||
|
|
||||||
async createContract() {
|
async createContract() {
|
||||||
const { tileStateUpdateHandler } = this;
|
const { tileStateUpdateHandler } = this;
|
||||||
this.contractClient = await createContract(tileStateUpdateHandler);
|
this.contractClient = await new ContractClient();
|
||||||
|
await this.contractClient.createContract();
|
||||||
this.requestUpdateTilesOnCanvas();
|
this.requestUpdateTilesOnCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,15 +47,17 @@ class App extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async requestUpdateTilesOnCanvas() {
|
async requestUpdateTilesOnCanvas() {
|
||||||
const tileMapState = await this.contractClient.methods.GetTileMapState().call()
|
const tileMapState = await this.contractClient.getTileMapState()
|
||||||
if (tileMapState) {
|
const tileData = tileMapState.getData()
|
||||||
const canvasState = JSON.parse(tileMapState);
|
debugger
|
||||||
|
if (tileData) {
|
||||||
|
const canvasState = JSON.parse(tileData);
|
||||||
this.setState({ canvasState });
|
this.setState({ canvasState });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setTileMapState = async (data) => {
|
setTileMapState = async (data) => {
|
||||||
await this.contractClient.methods.SetTileMapState(data).send()
|
await this.contractClient.setTileMapState(JSON.stringify(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
setAccount(_account){
|
setAccount(_account){
|
||||||
@ -73,7 +77,7 @@ class App extends React.Component {
|
|||||||
const { web3Provider, loading, canvasState } = this.state;
|
const { web3Provider, loading, canvasState } = this.state;
|
||||||
return (
|
return (
|
||||||
<Web3Render ready={web3Provider}>
|
<Web3Render ready={web3Provider}>
|
||||||
<DrawField setTileMapState={setTileMapState} canvasState={canvasState} />
|
<DrawField setTileMapState={setTileMapState} canvasState={canvasState} request={this.requestUpdateTilesOnCanvas.bind(this)}/>
|
||||||
</Web3Render>
|
</Web3Render>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
300
app/proto/dots_pb.js
Normal file
300
app/proto/dots_pb.js
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
/**
|
||||||
|
* @fileoverview
|
||||||
|
* @enhanceable
|
||||||
|
* @suppress {messageConventions} JS Compiler reports an error if a variable or
|
||||||
|
* field starts with 'MSG_' and isn't a translatable message.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
// GENERATED CODE -- DO NOT EDIT!
|
||||||
|
|
||||||
|
var jspb = require('google-protobuf');
|
||||||
|
var goog = jspb;
|
||||||
|
var global = Function('return this')();
|
||||||
|
|
||||||
|
goog.exportSymbol('proto.TileMapState', null, global);
|
||||||
|
goog.exportSymbol('proto.TileMapTx', null, global);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated by JsPbCodeGenerator.
|
||||||
|
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||||
|
* server response, or constructed directly in Javascript. The array is used
|
||||||
|
* in place and becomes part of the constructed object. It is not cloned.
|
||||||
|
* If no data is provided, the constructed object will be empty, but still
|
||||||
|
* valid.
|
||||||
|
* @extends {jspb.Message}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
proto.TileMapTx = function(opt_data) {
|
||||||
|
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||||
|
};
|
||||||
|
goog.inherits(proto.TileMapTx, jspb.Message);
|
||||||
|
if (goog.DEBUG && !COMPILED) {
|
||||||
|
proto.TileMapTx.displayName = 'proto.TileMapTx';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||||
|
/**
|
||||||
|
* Creates an object representation of this proto suitable for use in Soy templates.
|
||||||
|
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||||
|
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||||
|
* For the list of reserved names please see:
|
||||||
|
* com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
|
||||||
|
* @param {boolean=} opt_includeInstance Whether to include the JSPB instance
|
||||||
|
* for transitional soy proto support: http://goto/soy-param-migration
|
||||||
|
* @return {!Object}
|
||||||
|
*/
|
||||||
|
proto.TileMapTx.prototype.toObject = function(opt_includeInstance) {
|
||||||
|
return proto.TileMapTx.toObject(opt_includeInstance, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static version of the {@see toObject} method.
|
||||||
|
* @param {boolean|undefined} includeInstance Whether to include the JSPB
|
||||||
|
* instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @param {!proto.TileMapTx} msg The msg instance to transform.
|
||||||
|
* @return {!Object}
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.TileMapTx.toObject = function(includeInstance, msg) {
|
||||||
|
var f, obj = {
|
||||||
|
data: jspb.Message.getFieldWithDefault(msg, 1, "")
|
||||||
|
};
|
||||||
|
|
||||||
|
if (includeInstance) {
|
||||||
|
obj.$jspbMessageInstance = msg;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format).
|
||||||
|
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||||
|
* @return {!proto.TileMapTx}
|
||||||
|
*/
|
||||||
|
proto.TileMapTx.deserializeBinary = function(bytes) {
|
||||||
|
var reader = new jspb.BinaryReader(bytes);
|
||||||
|
var msg = new proto.TileMapTx;
|
||||||
|
return proto.TileMapTx.deserializeBinaryFromReader(msg, reader);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format) from the
|
||||||
|
* given reader into the given message object.
|
||||||
|
* @param {!proto.TileMapTx} msg The message object to deserialize into.
|
||||||
|
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||||
|
* @return {!proto.TileMapTx}
|
||||||
|
*/
|
||||||
|
proto.TileMapTx.deserializeBinaryFromReader = function(msg, reader) {
|
||||||
|
while (reader.nextField()) {
|
||||||
|
if (reader.isEndGroup()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var field = reader.getFieldNumber();
|
||||||
|
switch (field) {
|
||||||
|
case 1:
|
||||||
|
var value = /** @type {string} */ (reader.readString());
|
||||||
|
msg.setData(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reader.skipField();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the message to binary data (in protobuf wire format).
|
||||||
|
* @return {!Uint8Array}
|
||||||
|
*/
|
||||||
|
proto.TileMapTx.prototype.serializeBinary = function() {
|
||||||
|
var writer = new jspb.BinaryWriter();
|
||||||
|
proto.TileMapTx.serializeBinaryToWriter(this, writer);
|
||||||
|
return writer.getResultBuffer();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the given message to binary data (in protobuf wire
|
||||||
|
* format), writing to the given BinaryWriter.
|
||||||
|
* @param {!proto.TileMapTx} message
|
||||||
|
* @param {!jspb.BinaryWriter} writer
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.TileMapTx.serializeBinaryToWriter = function(message, writer) {
|
||||||
|
var f = undefined;
|
||||||
|
f = message.getData();
|
||||||
|
if (f.length > 0) {
|
||||||
|
writer.writeString(
|
||||||
|
1,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional string data = 1;
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
proto.TileMapTx.prototype.getData = function() {
|
||||||
|
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** @param {string} value */
|
||||||
|
proto.TileMapTx.prototype.setData = function(value) {
|
||||||
|
jspb.Message.setProto3StringField(this, 1, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated by JsPbCodeGenerator.
|
||||||
|
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||||
|
* server response, or constructed directly in Javascript. The array is used
|
||||||
|
* in place and becomes part of the constructed object. It is not cloned.
|
||||||
|
* If no data is provided, the constructed object will be empty, but still
|
||||||
|
* valid.
|
||||||
|
* @extends {jspb.Message}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
proto.TileMapState = function(opt_data) {
|
||||||
|
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||||
|
};
|
||||||
|
goog.inherits(proto.TileMapState, jspb.Message);
|
||||||
|
if (goog.DEBUG && !COMPILED) {
|
||||||
|
proto.TileMapState.displayName = 'proto.TileMapState';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||||
|
/**
|
||||||
|
* Creates an object representation of this proto suitable for use in Soy templates.
|
||||||
|
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||||
|
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||||
|
* For the list of reserved names please see:
|
||||||
|
* com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
|
||||||
|
* @param {boolean=} opt_includeInstance Whether to include the JSPB instance
|
||||||
|
* for transitional soy proto support: http://goto/soy-param-migration
|
||||||
|
* @return {!Object}
|
||||||
|
*/
|
||||||
|
proto.TileMapState.prototype.toObject = function(opt_includeInstance) {
|
||||||
|
return proto.TileMapState.toObject(opt_includeInstance, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static version of the {@see toObject} method.
|
||||||
|
* @param {boolean|undefined} includeInstance Whether to include the JSPB
|
||||||
|
* instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @param {!proto.TileMapState} msg The msg instance to transform.
|
||||||
|
* @return {!Object}
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.TileMapState.toObject = function(includeInstance, msg) {
|
||||||
|
var f, obj = {
|
||||||
|
data: jspb.Message.getFieldWithDefault(msg, 1, "")
|
||||||
|
};
|
||||||
|
|
||||||
|
if (includeInstance) {
|
||||||
|
obj.$jspbMessageInstance = msg;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format).
|
||||||
|
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||||
|
* @return {!proto.TileMapState}
|
||||||
|
*/
|
||||||
|
proto.TileMapState.deserializeBinary = function(bytes) {
|
||||||
|
var reader = new jspb.BinaryReader(bytes);
|
||||||
|
var msg = new proto.TileMapState;
|
||||||
|
return proto.TileMapState.deserializeBinaryFromReader(msg, reader);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format) from the
|
||||||
|
* given reader into the given message object.
|
||||||
|
* @param {!proto.TileMapState} msg The message object to deserialize into.
|
||||||
|
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||||
|
* @return {!proto.TileMapState}
|
||||||
|
*/
|
||||||
|
proto.TileMapState.deserializeBinaryFromReader = function(msg, reader) {
|
||||||
|
while (reader.nextField()) {
|
||||||
|
if (reader.isEndGroup()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var field = reader.getFieldNumber();
|
||||||
|
switch (field) {
|
||||||
|
case 1:
|
||||||
|
var value = /** @type {string} */ (reader.readString());
|
||||||
|
msg.setData(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reader.skipField();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the message to binary data (in protobuf wire format).
|
||||||
|
* @return {!Uint8Array}
|
||||||
|
*/
|
||||||
|
proto.TileMapState.prototype.serializeBinary = function() {
|
||||||
|
var writer = new jspb.BinaryWriter();
|
||||||
|
proto.TileMapState.serializeBinaryToWriter(this, writer);
|
||||||
|
return writer.getResultBuffer();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the given message to binary data (in protobuf wire
|
||||||
|
* format), writing to the given BinaryWriter.
|
||||||
|
* @param {!proto.TileMapState} message
|
||||||
|
* @param {!jspb.BinaryWriter} writer
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.TileMapState.serializeBinaryToWriter = function(message, writer) {
|
||||||
|
var f = undefined;
|
||||||
|
f = message.getData();
|
||||||
|
if (f.length > 0) {
|
||||||
|
writer.writeString(
|
||||||
|
1,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional string data = 1;
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
proto.TileMapState.prototype.getData = function() {
|
||||||
|
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** @param {string} value */
|
||||||
|
proto.TileMapState.prototype.setData = function(value) {
|
||||||
|
jspb.Message.setProto3StringField(this, 1, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
goog.object.extend(exports, proto);
|
@ -30,7 +30,7 @@
|
|||||||
"formik": "^0.11.11",
|
"formik": "^0.11.11",
|
||||||
"jquery": "^3.3.1",
|
"jquery": "^3.3.1",
|
||||||
"lodash": "^4.17.10",
|
"lodash": "^4.17.10",
|
||||||
"loom-js": "^1.14.0",
|
"loom-js": "^1.17.0",
|
||||||
"openzeppelin-solidity": "1.10.0",
|
"openzeppelin-solidity": "1.10.0",
|
||||||
"react": "^16.3.2",
|
"react": "^16.3.2",
|
||||||
"react-blockies": "^1.3.0",
|
"react-blockies": "^1.3.0",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user