JS调用MetaMask调用启动转账

1 、代码必须跑在nginx下,否则没有eth对象。

2、可以下载ganache来单跑个私服,然后安装谷歌metamask浏览器插件来实验

3、账户1:0xFA387e41FA471172cC729167EBD4862aA7020D91

     账户2:0x818DF62ff0bE3B28AE8be25e2e848E10138018B7

4、1000000000000000 为金额

<!doctype html>
<html class="no-js" lang="en">
<meta charset="UTF-8">
 
<head>
  <script src="https://cdn.jsdelivr.net/npm/const@1.0.0/src/const.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/big.js@6.2.1/big.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/web3@1.8.1/dist/web3.min.js"></script>
  <script type="text/javascript">
 
    send = async () =>{
      alert('test')
      const web3 = new Web3(window.ethereum);
      ethereum.enable()
      //获取地址
      let accounts = await  web3.eth.getAccounts();
      let account = accounts[0];
      console.log("地址:"+account)
      // 返回指定地址账户的余额
      let balance = await web3.eth.getBalance(account);
      console.log("账户余额:"+balance)
      let contractAbi = [这里输入你要交互合约的ABI]
      let contractAddress = '这里输入你自己要交互的0X开头的合约地址'
      let myContract = new web3.eth.Contract(contractAbi, contractAddress, {
        from: account, // default from address
        gasLimit: 70000,
        gasPrice: 1000000000 // default gas price in wei, 10 gwei in this case
      });
      let a = 1000000
      let toAddress = document.getElementById("toAddress").value;
      console.log("转账地址:"+toAddress)
      myContract.methods.transfer(toAddress, 1 * a,).send({from: account}, function(error, transactionHash){
        if(!error) {
          console.log('transactionHash is' + transactionHash);
        } else {
          console.log(error);
        }
      });
    }

function login(){
  var web3Provider;
    if (window.ethereum) {
        web3Provider = window.ethereum;
        try {
            // 请求用户授权
             window.ethereum.enable();
        } catch (error) {
            // 用户不授权时
            console.error("User denied account access")
        }
    }
    web3js = new Web3(web3Provider);//web3js就是你需要的web3实例
 
    web3js.eth.getAccounts(function (error, result) {
        if (!error)
            console.log(result)//授权成功后result能正常获取到账号了
    });
}

 function sendTransaction(){
  console.log(web3js)

web3js.eth.sendTransaction({
        from: '0xFA387e41FA471172cC729167EBD4862aA7020D91',
        to: '0x818DF62ff0bE3B28AE8be25e2e848E10138018B7',
        value: '1000000000000000'
    }).on('transactionHash', function(hash){
        console.info(hash)
    })
        .on('receipt', function(receipt){
        console.info(receipt)
        })
        .on('confirmation', function(confirmationNumber, receipt){
            console.info(confirmationNumber)
            console.info(receipt)
        })
        .on('error', console.error);
 }
  </script>
</head>
 
<body>
<!-- 会导出一个全局的变量: ethers -->
<input type="text" id="toAddress" placeholder="to transfer address"  value="0x615DD7fF9E4CE3eB832551C473a21F4AA4Bd727B"/>
<input type="button" οnclick="send()" value="有签名转账(无需提供privateKey)需要metamask解锁"  />


<input type="button" οnclick="login()" value="Login"  />


<input type="button" οnclick="sendTransaction()" value="Trade"  />
</body>
 
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓开发工程师面试题!春招我借这份PDF的复习思路,不吃透都对不起自己

写在前面 身边有不少去大厂面试的朋友&#xff0c;其中小金面试字节跳动的经历很有意义&#xff0c;在这里分享给大家。小金是末流211计算机专业大三本科生&#xff0c;前几天面试了字节跳动的广州Android开发实习生。下面是他的面试经历&#xff0c;还有一些他自己的经验。 …

合算的日本料理

巨鹿路和那个茂名路路口的《和味》&#xff0c;有预订的话才98一个人&#xff0c;味道不错&#xff0c;楼上的桃子MM服务狠好&#xff0c;笑容狠甜。那里的东西味道还是狠正宗的&#xff0c;除了一个色拉不对。那里的清酒和梅酒都不错&#xff0c;尤其梅酒。生牛肉虽然没有大渔…

安卓开发必须会的技能!浅谈Android消息机制原理,威力加强版

目录 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 PagerAdapter 介绍ViwePager 缓存策略ViewPager 布局处理ViewPager 事件处理相关内容 Android 基础 1.Activity 1、 什么是 Activi…

NuGet 无法连接到远程服务器-解决方法(转)

原地址&#xff1a; http://www.lixin.me/blog/2012/03/01/29362 今天打开NuGet的Manage NuGet Packages&#xff0c;显示“无法连接到远程服务器”。打开Setting-》Package Manager-》Package Sources。看到里面有一个源&#xff1a;https://go.microsoft.com/fwlink/?LinkID…

安卓开发面试书籍,全世界都在问Android开发凉了吗?建议收藏

前言 本想今年辞掉工作大干一场&#xff0c;没想到碰到疫情&#xff0c;家里蹲了3个月…&#xff0c;还好字节能给一次机会。前阵子字节跳动的提前批开始了&#xff0c;看宣传是说有海量HC&#xff0c;机会多多&#xff0c;本着涨涨面经的心理&#xff0c;然后就投递了一下杭州…

杭州集训Day5

下面是Day5的题目&#xff01;&#xff08;其实都咕了好几天了 1007040210. T1 皇后 XY 的疑难 (1s 512MB) 1.1 题目描述有一个n*n的王国城堡地图上&#xff0c;皇后XY喜欢看骑士之间的战斗&#xff0c;于是他准备布置m个骑士&#xff0c;其中每一个骑士都可以向8个方向&#x…

安卓开发面试书籍,每个程序员都必须掌握的8种数据结构!面试必会

前言 本篇文章主要记录分享我的面试准备过程。 很多朋友问我为什么离职 关于离职原因&#xff0c;马云有一句经典的话“要么钱没给到位&#xff0c;要么心委屈了”&#xff0c;想必大家耳熟能详了&#xff0c;我这里再细说一下我个人离职原因&#xff1a; 工资倒挂&#xf…

使用thinkPHP做注册程序的实例

登录界面&#xff1a; 数据库和数据表的结构 具体的操作步骤如下&#xff1a; 第一步&#xff1a;入口文件index.php内容 (此文件基本是属于固定的格式&#xff09; <?phpdefine(THINK_PATH,./ThinkPHP/);define(APP_NAME,MyApp);define(APP_PAHT,./MyApp/);require_once T…

安卓开发面试技能介绍,来一份全面的面试宝典练练手,不吃透都对不起自己

前言 网上有很多对程序员简历的一些指导&#xff0c;这里就不重述&#xff0c;大家可以搜下网上其他大神的总结&#xff0c;结合自身情况修改下。我有几点建议&#xff1a; 1.尽量不要花哨&#xff0c;程序员和设计师或者产品运营还不一样&#xff0c;我们的简历成功与否决定…

上交所行情文件导入数据库

事情的起因很简单&#xff0c;需要将股票收盘行情导入数据库&#xff0c;因为科创板交易时间延长&#xff0c;需要将原有的程序进行改造&#xff0c;众所周知&#xff0c;程序员永远是不够用的&#xff0c;只能自己解决这个问题。 方式是用定时器调用shell脚本。 上交所的mktdt…

安卓开发面试题及答案,一次哔哩哔哩面试经历,年薪50W

没有稳定的工作&#xff0c;只有稳定的能力。 又到了万物复苏的季节&#xff0c;在程序猿这个行当里&#xff0c;作为 Android 开发出生的&#xff0c;在经历了八年的脱发生涯后&#xff0c;有了越来越多的想法和感触 趋势 随着各类移动跨平台的兴起&#xff0c;在 ReactNati…

Intent 简单用法

1.Intent有什么用&#xff1f; Android设计理念是鼓励减少组件间的耦合&#xff0c;因此Android提供了Intent (意图) &#xff0c;Intent是一种消息传递机制&#xff0c;可以在程序内使用&#xff0c;也可以在程序间使用&#xff0c;主要用于启动“Activity”“Service”和“广…

安卓开发面试题!带着问题深入学习Handler,进阶学习资料!

进大厂本来就很难了&#xff0c;不过做足了准备&#xff0c;你会发现很多问题都迎刃而解了&#xff0c;当然有时候运气也占了一部分&#xff0c;除了运气以外&#xff0c;当然与我自身的努力也是分不开的。运气也是实力的一部分&#xff0c;毕竟天助自助者~ 每次到年底做总结的…

VueJS教程3

目录 13、Vue实例 13.1 动态组件&#xff08;Tab切换、简化版留言板&#xff09;13.2 使用Vue开发TodoList14、Vue CLI14.1 使用vue-cli开发TodoList接着VueJS教程2。 13、Vue实例 13.1 动态组件&#xff08;Tab切换、简化版留言板&#xff09; 参考&#xff1a;https://vuejs.…

春招我借这份PDF的复习思路,论程序员成长的正确姿势

一. 开发背景 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 面试总结 面试大厂一定要做好充分的准备&#xff0c;没有准备就去面试完全是去当炮灰的&#xff0c;更是对自己的不负责。再…

T-SQL语句学习(三)

这部分介绍下视图、索引技术。 1、视图&#xff1a;是从一个或几个基本表&#xff08;或视图&#xff09;导出表。视图与基本表不同&#xff0c;是一个虚表。 当基本表中的数据发生变化时&#xff0c;从视图中查询出来的数据也会随之改变。 1.1 定义视图 a、创建视图的语法要求…

普通二本的辛酸Android面试之路,满满干货指导

一、自我介绍 应该算是起点比较高吧&#xff01;985大学毕业后面一直在国外读研。之前准备面试微软但是可能经验不够&#xff0c;没有通过。经过朋友介绍我准备回国&#xff0c;积累一些开发经验。于是我面试了国内大厂BATJ&#xff0c;还有一些其他比较知名的公司&#xff0c…

python-3.8.0 新特性之赋值表达式

【python-3.8.0 新特性之赋值表达式】 赋值表达式的语法是这样的“ name : expression ”&#xff0c;形式上看和赋值语句 “ ” 差不多&#xff0c;就作用上来看也雷同。也就是说 “:” 不是必不可少的&#xff0c;它只是一个锦上添花的新语法。 【1、例子】 假设我们要对列表…

普通二本的辛酸Android面试之路,算法太TM重要了

前言 编程是一个江湖&#xff0c;江湖之大&#xff0c;鱼龙混杂&#xff0c;一部分江湖人士乃虾兵蟹将&#xff0c;一不小心就被一箭射死&#xff0c;我们称之为“码农”&#xff0c;这些人事江湖的重要组成部分&#xff0c;他们承担着堆砌代码&#xff0c;实现功能设计的使命…

SQL常用日期处理函数(转)

/**datepart()函数的使用 * datepart()函数可以方便的取到时期中的各个部分*如日期&#xff1a;2006-07--02 18&#xff1a;15&#xff1a;36.513* yy:取年 2006* mm:取月 7* dd:取月中的天 2* dy:取年中的天 183* wk:取…