通过 HTTPS 解锁帐户时,web3 HTTP 访问被禁止错误
web3 HTTP access is forbidden error when unlocking account over HTTPS
我正在构建一个 Express 应用程序,它试图在 Quorum 区块链 运行 中部署智能合约 运行 =24=]Openshift.
当我 运行 应用程序时,它会尝试解锁一个帐户来部署合约。
在这一步我得到以下错误:
# UNLOCKED FAILED.
Error: Returned error: account unlock with HTTP access is forbidden
[0] at Object.ErrorResponse (/.../my-project/node_modules/web3-core-helpers/src/errors.js:29:16)
[0] at /.../my-project/node_modules/web3-core-requestmanager/src/index.js:140:36
[0] at XMLHttpRequest.request.onreadystatechange (/.../my-project/node_modules/web3-providers-http/src/index.js:96:13)
[0] at XMLHttpRequestEventTarget.dispatchEvent (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js:34:22)
[0] at XMLHttpRequest._setReadyState (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request.js:208:14)
[0] at XMLHttpRequest._onHttpResponseEnd (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request.js:318:14)
[0] at IncomingMessage.<anonymous> (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request.js:289:61)
[0] at IncomingMessage.emit (events.js:327:22)
[0] at endReadableNT (_stream_readable.js:1224:12)
[0] at processTicksAndRejections (internal/process/task_queues.js:84:21)
但是,我的 Quorum 节点的端点是 https。
这是导致错误的代码:
const web3 = new Web3(HTTPS_QUORUM_ENDPOINT);
const account = (await web3.eth.getAccounts())[0];
await web3.eth.personal
.unlockAccount(account, ACCOUNT_PASSWORD)
.then((response) => {
console.log("# UNLOCKED. OKAY.");
})
.catch((error) => {
console.log("# UNLOCKED FAILED.");
console.error(error);
});
我是不是做错了什么?会不会是通往 Quorum pod 的 openshift 网关不安全,即使路由是安全的?
最新的仲裁版本继承了上游行为,出于安全原因,它不允许通过 HTTP-RPC 解锁。有一个命令行标志 --allow-insecure-unlock
可以在启动 geth 时传递,这将重新允许此操作。
这在此处的上游 geth 命令行选项中有描述:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
(请注意,geth 实际上并不支持 HTTPS,因此 HTTPS_QUORUM_ENDPOINT
实际上必须使用 HTTP,或者我猜它使用 HTTPS 连接到反向代理,然后通过HTTP-RPC 端口。)
我正在构建一个 Express 应用程序,它试图在 Quorum 区块链 运行 中部署智能合约 运行 =24=]Openshift.
当我 运行 应用程序时,它会尝试解锁一个帐户来部署合约。
在这一步我得到以下错误:
# UNLOCKED FAILED.
Error: Returned error: account unlock with HTTP access is forbidden
[0] at Object.ErrorResponse (/.../my-project/node_modules/web3-core-helpers/src/errors.js:29:16)
[0] at /.../my-project/node_modules/web3-core-requestmanager/src/index.js:140:36
[0] at XMLHttpRequest.request.onreadystatechange (/.../my-project/node_modules/web3-providers-http/src/index.js:96:13)
[0] at XMLHttpRequestEventTarget.dispatchEvent (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js:34:22)
[0] at XMLHttpRequest._setReadyState (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request.js:208:14)
[0] at XMLHttpRequest._onHttpResponseEnd (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request.js:318:14)
[0] at IncomingMessage.<anonymous> (/.../my-project/node_modules/xhr2-cookies/dist/xml-http-request.js:289:61)
[0] at IncomingMessage.emit (events.js:327:22)
[0] at endReadableNT (_stream_readable.js:1224:12)
[0] at processTicksAndRejections (internal/process/task_queues.js:84:21)
但是,我的 Quorum 节点的端点是 https。
这是导致错误的代码:
const web3 = new Web3(HTTPS_QUORUM_ENDPOINT);
const account = (await web3.eth.getAccounts())[0];
await web3.eth.personal
.unlockAccount(account, ACCOUNT_PASSWORD)
.then((response) => {
console.log("# UNLOCKED. OKAY.");
})
.catch((error) => {
console.log("# UNLOCKED FAILED.");
console.error(error);
});
我是不是做错了什么?会不会是通往 Quorum pod 的 openshift 网关不安全,即使路由是安全的?
最新的仲裁版本继承了上游行为,出于安全原因,它不允许通过 HTTP-RPC 解锁。有一个命令行标志 --allow-insecure-unlock
可以在启动 geth 时传递,这将重新允许此操作。
这在此处的上游 geth 命令行选项中有描述:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
(请注意,geth 实际上并不支持 HTTPS,因此 HTTPS_QUORUM_ENDPOINT
实际上必须使用 HTTP,或者我猜它使用 HTTPS 连接到反向代理,然后通过HTTP-RPC 端口。)