cashscript icon indicating copy to clipboard operation
cashscript copied to clipboard

add a 'BchdGrpcNetworkProvider'

Open mr-zwets opened this issue 1 year ago • 2 comments

We might also want to add a BchdGrpcNetworkProvider

I experimented with the BCHD grpc years ago, i used the library @improbable-eng/grpc-web back then but now grpc-web seems to be the standard. I simply copy/pasted the bchrpc folder from bchd-block-explorer back then.

There's old documentation in the BCHD repo, but it's probably out-of-date: https://github.com/gcash/bchd/tree/master/bchrpc/documentation/client-usage-examples/nodejs-grpc

I used

import * as pb from "./bchrpc/bchrpc_pb_service";
import { GetAddressTransactionsRequest } from "./bchrpc/bchrpc_pb";

const client = new pb.bchrpcClient("https://ryzen.electroncash.de:8335");

and then something like

let getAddressTransactionsRequest = new GetAddressTransactionsRequest();
getAddressTransactionsRequest.setAddress(address);

console.log("getAddressTransactions");

const cancel = client.getAddressTransactions(getAddressTransactionsRequest, headers, function (error, response) {
    if (error) {
        // todo: show error modal
        console.log("error getAddressTransactions:", error.code, error.message);
    } else {
        console.log("getAddressTransactions");
        let message = new GetAddressTransactionsResponse();
        message = response;
    }
});

mr-zwets avatar Dec 20 '24 17:12 mr-zwets

@PHCitizen looked into this some more but apparently grpc-web doesn't support ESM and then there would have to be a separate library to use grpc in server environments with something like @grpc/grpc-js which is not ideal.

We want CashScript to be able to run on both on the different server runtimes as well as the browser

I found this popular library which seems promising to work with grpc in both browser and server: https://github.com/timostamm/protobuf-ts

There's a MANUAL.md in the repo

mr-zwets avatar Jan 27 '25 13:01 mr-zwets

I found this popular library which seems promising to work with grpc in both browser and server: https://github.com/timostamm/protobuf-ts

So this one works (kind off). I use it with GrpcWebFetchTransport.

@mr-zwets tells that CashScript requires nodejs v20 so the polyfill for fetch is not needed! Thanks!

Issue encountered

  • [ ] bchrpc submitTransaction seems to always return error telling tx rejected: already have transaction
  • [ ] bchrpc getAddressUnspentOutputs does not support p2sh32
  • [x] parsing bitfield😅 i currently cant figure out how to parse it easily (returned by getAddressUnspentOutputs)
  • [ ] https://github.com/timostamm/protobuf-ts/issues/656 an open issue for adding .js extension. Currently i edit it manually to work

PHCitizen avatar Feb 02 '25 10:02 PHCitizen