我有一个简单的 Dapp,我想签署一笔交易,但我没有字符串形式的私钥。
用户正在使用 MetaMask 钱包。在他们授予 web3 访问其帐户的权限后,我如何访问私钥来签署交易?
const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY);
// PRIVATE_KEY is what I'm trying to get.
Run Code Online (Sandbox Code Playgroud) 正在使用 React Native 开发一个移动应用程序,其中涉及交互web3.js
,问题是 RN 不支持核心 Node.js 模块,所以我必须安装
npm i --save react-native-crypto
npm i --save react-native-randombytes
react-native link react-native-randombytes
npm i --save-dev rn-nodeify@latest
./node_modules/.bin/rn-nodeify --hack --install
现在每当我尝试使用时我都会遇到这个错误crypto or web3.js

任何线索是什么问题或者如何解决它?
我使用 ganache-cli 构建本地区块链,使用 truffle 部署合约。为了与已部署的合约进行交互,我使用 truffle 控制台。例如,我将代币从我的当前帐户(即web3.eth.personal.getAccounts()[0])转移到web3.eth.personal.getAccounts()[1]此后,我想将我的当前帐户更改为web3.eth.personal.getAccounts()[1]地址。
怎么做?
我正在尝试使用OpenSea JavaScript API来自动列出待售的 NFT。我似乎无法弄清楚为什么我不断收到错误Error: API Error 400: ['Failed to extract transfer calldata']。也许我没有正确输入一些数据?我的代码改编自这个示例。
来源
const opensea = require("opensea-js");
const OpenSeaPort = opensea.OpenSeaPort;
const Network = opensea.Network;
const MnemonicWalletSubprovider = require("@0x/subproviders")
.MnemonicWalletSubprovider;
const RPCSubprovider = require("web3-provider-engine/subproviders/rpc");
const Web3ProviderEngine = require("web3-provider-engine");
const MNEMONIC = "SECRET ...";
const NODE_API_KEY = "FROM INFURA";
const isInfura = true;
//const FACTORY_CONTRACT_ADDRESS = process.env.FACTORY_CONTRACT_ADDRESS;
const NFT_CONTRACT_ADDRESS = "0x495f947276749Ce646f68AC8c248420045cb7b5e";
const OWNER_ADDRESS = "0x3eb8eea9565418281f4cae934dd69e7ff2bb5949";
const NETWORK = "mainnet";
const API_KEY = process.env.API_KEY || ""; …Run Code Online (Sandbox Code Playgroud) 在一个场景中,WalletA定期从AddressC接收TokenB。AddressC只发送TokenB,没有其他。
在 etherscan 或 bscscan 中,很容易看到 WalletA 中收到了多少 TokenB,并且“from”字段在那里,因此您可以做一些数学运算来获得总数。
使用 web3 如何做到这一点?我在web3文档中找不到任何相关的api调用。我可以通过 web3.js 获取 WalletA 中 TokenB 的总余额,但我需要仅从AddressC 发送的代币数量。
谢谢。
我使用 svelte 创建 Web3 应用程序并遇到一些错误
1.我已经在我的index.html上添加了web3.js cdn
<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
2.这是我在 .svelte 文件上的脚本,用于连接 Metamask 钱包
function connectWallet(){
if(window.ethereum){
window.web3 = new Web3(ethereum);
window.ethereum.enable();
metamaskConnected = window.ethereum.isConnected();
web3.eth.getAccounts(function(error, accounts) {
WalletAddress = accounts
console.log(error)
})
}
}
Run Code Online (Sandbox Code Playgroud)
当我第一次在浏览器(Brave)上打开我的网站时,我收到了这个错误
未选中的runtime.lastError:无法建立连接
并且脚本不起作用
下面代码中的 msg.sender 和 address(this) 有什么区别?
**编译指示可靠性^0.8.0;
contract Escrow{
address public payer;
address payable public payee;
address public lawyer;
uint public amount;
constructor(
address _payer,
address payable _payee,
uint _amount) {
payer = _payer;
payee = _payee;
lawyer = msg.sender;
amount = _amount;
}
function deposit() payable public {
require(msg.sender == payer, 'Sender must be the payer');
require(address(this).balance <= amount, 'Cant send more than escrow amount');
}
function release() public {
require(address(this).balance == amount, 'cannot release funds before full amount is …Run Code Online (Sandbox Code Playgroud) 我正在使用 next.js 和 web3 构建一个应用程序。要将用户钱包连接到前端,我使用 web3modal,如下所示:
const Home: NextPage = () => {
const [signer, setSigner] = useState<JsonRpcSigner | null>(null)
async function connect() {
const web3Modal = new Web3Modal()
const connection = await web3Modal.connect()
const provider = new ethers.providers.Web3Provider(connection)
const signer = provider.getSigner()
setSigner(signer)
}
return (
<div className="flex justify-center">
<button onClick={() => connect()}>Connect wallet</button>
{ signer && (
<h3>wallet connected: {signer._address}</h3>
)}
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
用户可以成功连接钱包,遗憾的signer._address是始终为null。我想向用户显示刚刚连接的地址,我该如何解决这个问题?
我正在使用 Etherscan API 获取交易数据。这是我得到的示例结果:
{
blockNumber: '7409930',
timeStamp: '1639151980',
hash: '...',
nonce: '4124',
...
input: '0x9d90e4c8000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000093238bb66b5d15b4152c5db574e3397ff1b1a450',
contractAddress: '',
cumulativeGasUsed: '403775',
gasUsed: '1162315',
confirmations: '191308'
}
Run Code Online (Sandbox Code Playgroud)
我现在需要找出该交易的事件类型(合约方法,例如,,...)TransferOwnership。stakeTokens该数据存储在input该对象的属性中。
我设法使用abi-decoder库来完成此任务,但我想使用 ethers 的实用方法(以哪种方式)来完成同样的事情。
我当前的实现:
const abiDecoder = require("abi-decoder");
abiDecoder.addABI(contractAbi);
// "item" is transaction data, input property is encoded stuff from which I want to get the contract method used by this transaction
const decodedInput = abiDecoder.decodeMethod(item.input);
// contract method
console.log(decodedInput.name);
Run Code Online (Sandbox Code Playgroud)
我正在阅读以太坊的文档(https://docs.ethers.io/v5/api/utils/abi/coder/),但我无法弄清楚。
./node_modules/cipher-base/index.js 中的错误 3:16-43
找不到模块:错误:无法解析“C:\Users\Sumana\Desktop\Web3\web3app\node_modules\cipher-base”中的“流”
重大更改:webpack < 5 默认情况下包含 Node.js 核心模块的 Polyfill。这已不再是这种情况。验证您是否需要此模块并为其配置一个polyfill。
如果你想包含一个polyfill,你需要: - 添加一个后备 'resolve.fallback: { "stream": require.resolve("stream-browserify") }' - 安装 'stream-browserify' 如果你不这样做想要包含一个polyfill,你可以使用一个空模块,如下所示:resolve.fallback: { "stream": false }