标签: web3js

访问 MetaMask 钱包中的私钥

我有一个简单的 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)

javascript blockchain ethereum web3js metamask

5
推荐指数
1
解决办法
2万
查看次数

TypeError:null不是对象(评估“RNRandomBytes.seed”)React Native

正在使用 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 在此输入图像描述

任何线索是什么问题或者如何解决它?

cryptojs reactjs react-native web3js

5
推荐指数
1
解决办法
4190
查看次数

如何更改松露(ganache)帐户?

我使用 ganache-cli 构建本地区块链,使用 truffle 部署合约。为了与已部署的合约进行交互,我使用 truffle 控制台。例如,我将代币从我的当前帐户(即web3.eth.personal.getAccounts()[0])转移到web3.eth.personal.getAccounts()[1]此后,我想将我的当前帐户更改为web3.eth.personal.getAccounts()[1]地址。

怎么做?

blockchain solidity truffle web3js ganache

5
推荐指数
1
解决办法
5366
查看次数

通过 JS API 在 OpenSea 上列出 NFT:无法提取传输调用数据错误 400

我正在尝试使用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)

javascript node.js ethereum web3js

5
推荐指数
1
解决办法
3185
查看次数

使用 Web3.js 获取从特定地址收到的代币总量

在一个场景中,WalletA定期从AddressC接收TokenB。AddressC只发送TokenB,没有其他。

在 etherscan 或 bscscan 中,很容易看到 WalletA 中收到了多少 TokenB,并且“from”字段在那里,因此您可以做一些数学运算来获得总数。

使用 web3 如何做到这一点?我在web3文档中找不到任何相关的api调用。我可以通过 web3.js 获取 WalletA 中 TokenB 的总余额,但我需要仅从AddressC 发送的代币数量。

谢谢。

web3js

5
推荐指数
1
解决办法
2854
查看次数

我在 Metamask 上收到错误“未检查的运行时.lastError:无法建立连接”

我使用 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)
  1. 当我第一次在浏览器(Brave)上打开我的网站时,我收到了这个错误

    未选中的runtime.lastError:无法建立连接

并且脚本不起作用

  1. 我必须刷新页面,然后错误消失,这样我的代码才能正常工作

javascript svelte web3js

5
推荐指数
1
解决办法
450
查看次数

msg.sender和address(this)有什么区别?

下面代码中的 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)

ethereum solidity web3js

5
推荐指数
2
解决办法
3291
查看次数

如何使用 web3modal 获取已连接钱包的地址?

我正在使用 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。我想向用户显示刚刚连接的地址,我该如何解决这个问题?

javascript reactjs next.js web3js

5
推荐指数
1
解决办法
4849
查看次数

如何使用 ethers.utils.defaultAbiCoder 解码交易输入数据

我正在使用 Etherscan API 获取交易数据。这是我得到的示例结果:

{
  blockNumber: '7409930',
  timeStamp: '1639151980',
  hash: '...',
  nonce: '4124',
  ...
  input: '0x9d90e4c8000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000093238bb66b5d15b4152c5db574e3397ff1b1a450',
  contractAddress: '',
  cumulativeGasUsed: '403775',
  gasUsed: '1162315',
  confirmations: '191308'
}
Run Code Online (Sandbox Code Playgroud)

我现在需要找出该交易的事件类型(合约方法,例如,,...)TransferOwnershipstakeTokens该数据存储在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/),但我无法弄清楚。

javascript ethereum web3js etherscan ethers.js

5
推荐指数
1
解决办法
4220
查看次数

无法在React应用程序中导入web3库

./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 }

node.js reactjs web3js decentralized-applications

5
推荐指数
2
解决办法
2991
查看次数