Files
dshackle/dshackle-cli/src/grpc-clent.js

70 lines
1.8 KiB
JavaScript

const grpc = require("@grpc/grpc-js");
const path = require('path')
const protoLoader = require("@grpc/proto-loader");
const fs = require('fs');
const PROTO_PATH = path.join(__dirname, "../../emerald-grpc/proto/blockchain.proto");
const options = {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
};
const packageDefinition = protoLoader.loadSync(PROTO_PATH, options);
const emerald = grpc.loadPackageDefinition(packageDefinition).emerald
var id = 100
export function connect(url, ca, cert, key) {
let credentials = grpc.credentials.createInsecure()
if (ca || cert || key) {
console.log("Using TLS")
credentials = grpc.credentials.createSsl(
ca ? fs.readFileSync(ca) : null,
key ? fs.readFileSync(key) : null,
cert ? fs.readFileSync(cert) : null
);
}
console.log('Connecting to: ' + url + '...')
return new emerald.Blockchain(
url,
credentials
);
}
export function describe(client, handler) {
client.Describe({}, handler);
}
export function nativeCall(client, chainCode, chain) {
return new Promise((resolve, reject) => {
const call = client.NativeCall({
chain: chainCode,
items: [{
id: id++,
method: "eth_getBalance",
payload: "WyIweDhEOTc2ODlDOTgxODg5MkI3MDBlMjdGMzE2Y2MzRTQxZTE3ZkJlYjkiLCAibGF0ZXN0Il0="
}],
quorum: 1,
min_availability: 0
})
call.on('data', (item) => {
resolve(toResult(chain, item, null))
})
call.on('end', () => resolve(toResult(chain, null, null)))
call.on('error', (e) => reject(toResult(chain, null, e)))
})
}
function toResult(chain, obj, err) {
return {
chain: chain,
payload: obj,
error: err
}
}