在没有元掩码的情况下自动进行solidity传输

Posted

技术标签:

【中文标题】在没有元掩码的情况下自动进行solidity传输【英文标题】:Making a solidity transfer automatically without metamask 【发布时间】:2021-09-15 11:57:44 【问题描述】:

我对 Solidity 很陌生。我对 javascript html 和 css 更有经验。但我现在正在我的前端网站上制作一个免费的代币赠送者。用户输入他或她的地址并获得免费令牌的地方。合同链接到我的 web3js,一切运行良好。但我不能自动转移代币,而无需批准 metamask 上的交易。我真的很想自动化这个过程,这样我就可以在我的网站上实现很多新功能。

当我在 remix 中与我的合约交互时,它运行良好,但在 java 中它必须做 metamask 的事情。

这是我在 javascript 中的函数代码:

function Coingiver()
    
        const web3 = new Web3(window.ethereum);
        var slotContract = new web3.eth.Contract(abi, address);

        const addres-s-receive = document.getElementById("address").value;    
        const addressend = "0x582077e61D52bB1Ae6FB9EcEDa1eb39153E9A269";

        window.ethereum.enable();

        slotContract.methods.transferFrom(addressend, addres-s-receive, 1).send(from : addressend,function(err, res)
        
            if(err)
            
                console.log("error", err)
                return
            
            console.log("Hash of the transaction: ", res)
        );

        checkBalance();
    

那么我该如何自动化这个过程,这样我就不必每次都批准交易了? 感谢您帮助我(初学者)!

【问题讨论】:

【参考方案1】:

为了让用户发送交易以获取您的硬币,他们必须为交易支付汽油费。 metamask 在发送交易之前总是先询问用户的一个原因是为了防止网站通过重复将用户的 ETH 作为气体来消耗所有用户的 ETH。

如果你真的想为用户免费做这件事,你可以在服务器上使用 node.js 或 python,并让它在用户填写表格时签名并发送硬币。

请注意,收集空投存在大量欺诈行为,如果您只是发送到任何地址,诈骗者将生成无穷无尽的地址来获取硬币,并且您还需要支付 gas 费用。

【讨论】:

欺诈是一件有趣的事情,感谢您的回复! :)【参考方案2】:

要通过您的 JavaScript 代码自动执行任何交易,您需要使用本地私钥签署交易,该私钥具有 ETH 余额以支付汽油费。然后,您的应用程序管理私钥,而不是 MetaMask。

通常这样的私钥是通过环境、秘密文件等分发的,从不直接在源代码中 - 以避免泄露重要的密钥。

一个很好的解决方案是Truffle's hdwallet-provider 包。

【讨论】:

感谢您的回答!这对我帮助很大!

以上是关于在没有元掩码的情况下自动进行solidity传输的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有私钥的情况下将我的元掩码钱包中的 erc20 代币发送到其他地址?

在不刷新页面的情况下检测元掩码安装

如何在元掩码中自动切换帐户

Web3 签名验证失败 - ethers.js

使用元掩码时检测 web3 默认帐户的更好模式

元掩码 web3 未定义