add a 'BchdGrpcNetworkProvider'
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;
}
});
@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
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
- Reported @OPReturnCode
- [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
.jsextension. Currently i edit it manually to work