Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit 86b0e3d

Browse files
Merge pull request #5743 from trufflesuite/implement-1193-provider
Make @truffle/provider compatible with EIP-1193
2 parents 3123c7b + b50b9e5 commit 86b0e3d

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

packages/provider/wrapper.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,43 @@
11
const debug = require("debug")("provider:wrapper"); // eslint-disable-line no-unused-vars
22
const ProviderError = require("./error");
33

4+
function make1193ProviderRequest(provider) {
5+
/*
6+
NOTE: If truffle switches to use WebSockets instead of HTTP requests in the future
7+
then we will need to keep separate requestId counters for .request and .send
8+
methods to avoid collision while generating requestIds on parallel requests.
9+
*/
10+
let requestId = 0;
11+
const modifiedRequest = async function ({ method, params }) {
12+
return await new Promise((accept, reject) => {
13+
provider.send(
14+
{
15+
jsonrpc: "2.0",
16+
id: ++requestId,
17+
method,
18+
params
19+
},
20+
(error, response) => {
21+
if (error) {
22+
return reject(error);
23+
}
24+
if (response.error) {
25+
const error = new Error(response.error.message);
26+
error.code = response.error.code;
27+
if (response.error.data) {
28+
error.data = response.error.data;
29+
}
30+
return reject(error);
31+
}
32+
const { result: res } = response;
33+
accept(res);
34+
}
35+
);
36+
});
37+
};
38+
return modifiedRequest.bind(provider);
39+
}
40+
441
module.exports = {
542
/*
643
* Web3.js Transport Wrapper
@@ -32,6 +69,11 @@ module.exports = {
3269
const originalSendAsync = provider.sendAsync.bind(provider);
3370
provider.sendAsync = this.send(originalSendAsync, preHook, postHook);
3471
}
72+
73+
// EIP-1193 provider wrapping
74+
if (provider.request === undefined && provider.send !== undefined) {
75+
provider.request = make1193ProviderRequest(provider);
76+
}
3577
/* mark as wrapped */
3678
provider._alreadyWrapped = true;
3779

0 commit comments

Comments
 (0)