首页 > 其他分享 >关于Solidity脚本相关环境配置及脚本数据的查找

关于Solidity脚本相关环境配置及脚本数据的查找

时间:2024-06-06 23:23:14浏览次数:29  
标签:脚本 const Web3 Solidity contract js web3 查找 合约

来源:

在solidity安全中心做题时,有些题需要通过脚本进行计算,可以是JavaScript也可以是python的脚本,solidity安全方面初次接触可能不清楚该如何运行solidity的相关脚本。下面我来分开说说JavaScript 和 Python 对应的环境配置

python篇:

首先确保你的电脑中存在Python环境

Python安装:可以去搜索别的博文
python的官方下载地址:https://www.python.org/downloads/
根据自己的需求进行选择Windows Linux等版本

确认安装完成后,Win+R输入cmd打开命令行 输入
pip install web3
去安装web3 模块

WARNING:如果中途提示有文件需要C++的编译工具才能安装完成的话

需要安装个这个:Microsoft Visual C++ 或者安装好c++的相关环境
官网地址:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170

Javascript 篇:

1. 确保已安装Node.js和npm
首先,你需要在你的系统上安装Node.js。Node.js的安装包通常会附带npm。
2. 初始化Node.js项目
在你的项目文件夹中打开命令行(终端或命令提示符)。
输入npm init -y来初始化一个新的Node.js项目,这将会生成一个默认的package.json文件。
3. 安装web3.js
在命令行中输入npm install web3来安装web3.js库。npm将会自动下载并安装web3.js及其依赖项。
4. 测试web3.js是否安装成功
创建一个名为main.js的文件,并添加以下代码:

const { Web3 } = require('web3');  
 
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));  
  
 
console.log("Version:", web3.version);

在命令行中运行node main.js。如果一切正常,你应该能看到打印出的web3版本信息,这表示web3.js已成功安装并运行

下面是Solidity的脚本的示例(js版本和Python版本):
**Python版本: **

from web3 import Web3, HTTPProvider  
  
# 假设你已经有了私钥、地址和合约地址  
PRIVATE_KEY = 'YOUR_PRIVATE_KEY'  # 请替换为你的私钥  
CONTRACT_ADDRESS = 'YOUR_CONTRACT_ADDRESS'  # 请替换为你的合约地址  
INFURA_PROJECT_ID = 'YOUR_INFURA_PROJECT_ID'  # 如果你使用Infura,请替换为你的项目ID  
  
# 连接到Infura节点(或其他以太坊节点)  
w3 = Web3(HTTPProvider('https://mainnet.infura.io/v3/' + INFURA_PROJECT_ID))  
  
# 加载账户  
account = w3.eth.account.privateKeyToAccount(PRIVATE_KEY)  
w3.eth.defaultAccount = account.address  
  
# 加载合约ABI和地址  
# ABI(Application Binary Interface)是从Solidity编译器获取的,描述了合约的接口  
with open('SimpleStorage.abi', 'r') as file:  
    abi = json.load(file)  
  
# 创建合约实例  
contract = w3.eth.contract(address=CONTRACT_ADDRESS, abi=abi)  
  
# 调用合约的get函数  
stored_data = contract.functions.get().call()  
print(f"Stored Data: {stored_data}")  
  
# 调用合约的set函数  
transaction_hash = contract.functions.set(12345).transact({'from': account.address})  
print(f"Transaction Hash: {transaction_hash.hex()}")  
  
# 等待交易被挖矿并确认  
w3.eth.waitForTransactionReceipt(transaction_hash)  
  
# 再次调用get函数来确认数据已更改  
updated_stored_data = contract.functions.get().call()  
print(f"Updated Stored Data: {updated_stored_data}")                

JavaScript版本:

const Web3 = require('web3');  
const fs = require('fs');  
  
// 假设你已经有了私钥、地址和合约地址  
const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'; // 请替换为你的私钥  
const CONTRACT_ADDRESS = 'YOUR_CONTRACT_ADDRESS'; // 请替换为你的合约地址  
const INFURA_PROJECT_ID = 'YOUR_INFURA_PROJECT_ID'; // 如果你使用Infura,请替换为你的项目ID  
  
// 连接到Infura节点(或其他以太坊节点)  
const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/' + INFURA_PROJECT_ID));  
  
// 加载账户  
const account = web3.eth.accounts.privateKeyToAccount(PRIVATE_KEY);  
  
// 加载合约ABI和地址  
// ABI(Application Binary Interface)是从Solidity编译器获取的,描述了合约的接口  
const abi = JSON.parse(fs.readFileSync('SimpleStorage.abi', 'utf8'));  
  
// 创建合约实例  
const contract = new web3.eth.Contract(abi, CONTRACT_ADDRESS);  
  
// 调用合约的get函数  
contract.methods.get().call().then(storedData => {  
    console.log('Stored Data:', storedData);  
  
    // 调用合约的set函数  
    contract.methods.set(12345).send({ from: account.address }, (err, txHash) => {  
        if (err) {  
            console.error('Transaction failed:', err);  
        } else {  
            console.log('Transaction Hash:', txHash);  
  
            // 等待交易被挖矿并确认(这里只是一个简单的打印,你可能需要实现更复杂的逻辑)

相关数据的查找:
ABI:
合约地址大家应该会找
项目的地址查找:如果你是该Infura项目的协作者或具有适当的访问权限,你可以登录到Infura的“我的项目”页面,并查看所有你有权访问的项目。
密钥:

标签:脚本,const,Web3,Solidity,contract,js,web3,查找,合约
From: https://www.cnblogs.com/wangxingting316/p/18236268

相关文章

  • LNMP 环境下使用 Zstd 压缩优化网站备份脚本
    网站的备份一直都是网站运营、服务器运维中很重要的一环,明月无论是在自己的服务器还是客户的代运维服务器上都是非常重视网站备份的,尤其热衷于优化网站备份这块儿,毕竟明月自己的服务器配置一直都是最低的1H1G呀,就这配置常年都是4-5个网站放着呢!明月的博客毕竟有十来年了,单......
  • 代码随想录算法训练营第一天 | 704. 二分查找 27. 移除元素
    704.二分查找题目:给定一个n个元素有序的(升序)整型数组和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。提示:1.你可以假设nums中的所有元素是不重复的。2.n将在[1,10000]之间。3.nums的每个元素都将在[-9999,9999]之间。解题:思路:二......
  • shell脚本之证书到期监控和企微告警
    shell脚本之证书到期监控和企微告警shell脚本实现ssl证书过期及webhook推送脚本https.sh检测和告警脚本, https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxx替换为自己企微的webhook地址即可#!/bin/bash#*******************************************......
  • 脚本和版本控制系统
    脚本和版本控制系统是软件开发和数据科学项目中的关键组件,它们帮助开发者管理代码变更、协作和维护项目历史。以下是一些常用的脚本语言和版本控制系统:脚本语言PythonPython是一种广泛使用的高级编程语言,以其简洁的语法和强大的标准库而闻名。它在数据科学、机器学习、Web开......
  • Linu部署服务启停脚本
    Linux项目部署启停WEB应用(WAR包)部署实际开发中,难免遇见新业务项目构建、项目重构(重新优化整个项目的架构,相当于重写),也可能是项目拆分多个模块,也可能部分拆分,但项目的模块化分离,就存在新建项目,新开服务端的可能,在Linux部署中,我们通常遇见需要搭建一个新的服务:WEB应用(war......
  • Amesim竟然可以玩游戏?如何在Amesim草图界面运行Python脚本
    开门见山,笔者在Amesim中运行了贪吃蛇游戏。不光有贪吃蛇,还有锻炼记忆力的益智游戏。难道Amesim真的有隐藏的内置游戏?答案没有的,上述游戏都是通过python编写的,而为了实现从Amesim的草图界面执行Python文件,需要使用Simulation库的scriptinteractive(SCRCALL01)模块:在模块......
  • 多设备兼容脚本,轻松拿捏
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言有比较多同学有提到说能否一个脚本同时适用于Android跟iOS设备,也有同学问是否可以根据不同的Android厂商设备,去执行不同的操作,那么本周,我们一起探讨一下......
  • crontab防止重复执行脚本
    在做计划任务的时候,可能由于某些问题,任务没有执行完成,导致任务重复的运行,解决这个问题,只需要一个flock命令就可以了。参数-s,--shared:获取一个共享锁,在定向为某文件的FD上设置共享锁而未释放锁的时间内,其他进程试图在定向为此文件的FD上设置独占锁的请求失败,而其他进程试图在定......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素(数组)
    第一次打卡,记录还不够充分,会慢慢丰富起来一、二分查找题目链接:704.二分查找-力扣(LeetCode)讲解链接:Carl讲解视频讲解:代码随想录讲解 情况1:左闭右闭区间情况2:左闭右开区间 二、移除元素题目链接:27.移除元素-力扣(LeetCode)讲解链接:Carl讲解视频讲解:代码随想......
  • 代码随想录算法训练营第一天 | 704. 二分查找,27. 移除元素
    题目链接:704.二分查找思路:该题为有序数组查找,采用二分法。根据区间分为左闭右闭和左闭右开两种情况坑:左右区间的开闭补充:vector容器时间复杂度:O(logn)空间复杂度:O(1)题目链接:27.移除元素思路:题目说返回k个元素之后留下什么不重要,也不考虑数组剩下元素的......