38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
import { ethers } from 'ethers';
|
||
|
||
// 自定义Provider,使用uni.request替代原生fetch
|
||
class UniAppProvider extends ethers.providers.JsonRpcProvider {
|
||
async send(method, params) {
|
||
const payload = {
|
||
method: method,
|
||
params: params,
|
||
id: Math.floor(Math.random() * 1000000),
|
||
jsonrpc: "2.0"
|
||
};
|
||
|
||
return new Promise((resolve, reject) => {
|
||
uni.request({
|
||
url: this.connection.url,
|
||
data: JSON.stringify(payload),
|
||
method: 'POST',
|
||
header: {
|
||
'content-type': 'application/json'
|
||
},
|
||
success: (res) => {
|
||
if (res.statusCode !== 200) {
|
||
reject(new Error(`HTTP Error: ${res.statusCode}`));
|
||
return;
|
||
}
|
||
if (res.data.error) {
|
||
reject(new Error(res.data.error.message || JSON.stringify(res.data.error)));
|
||
return;
|
||
}
|
||
resolve(res.data.result);
|
||
},
|
||
fail: (err) => {
|
||
reject(new Error(err.errMsg || 'Request failed'));
|
||
}
|
||
});
|
||
});
|
||
}
|
||
} |