如果您想了解为Solidity/python安装布朗尼的问题的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于14、安装以太坊Solidity语言编译器、18、solidity的interf
如果您想了解为 Solidity/python 安装布朗尼的问题的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于14、安装以太坊 Solidity 语言编译器、18、solidity 的 interface、9、Solidity 的时间、单位转换。、opencv python 轮廓属性/纵横比/Extent/Solidity/等效直径/掩模/极点的有价值的信息。
本文目录一览:- 为 Solidity/python 安装布朗尼的问题
- 14、安装以太坊 Solidity 语言编译器
- 18、solidity 的 interface
- 9、Solidity 的时间、单位转换。
- opencv python 轮廓属性/纵横比/Extent/Solidity/等效直径/掩模/极点
为 Solidity/python 安装布朗尼的问题
如何解决为 Solidity/python 安装布朗尼的问题
我一直在运行布朗尼时遇到问题,所以我卸载了它,然后我重新安装了它并出现以下错误
要求已经满足:atomicwrites>=1.0 in c:\\python39\\lib\\site-packages(来自 pytest==6.2.3->eth-brownie) (1.4.0) 要求已经满足:colorama in c:\\python39\\lib\\site-packages(来自 pytest==6.2.3->eth-brownie) (0.4.4) 已经满足要求:pywin32>=223 in c:\\python39\\lib\\site-packages(来自 web3==5.18.0->eth-brownie)(301) 警告:忽略无效的分发 -p (c:\\python39\\lib\\site-packages) 警告:忽略无效分发 -ip (c:\\python39\\lib\\site-packages) 警告:忽略无效分发 - (c:\\python39\\lib\\site-packages) 安装收集 软件包:eth-brownie 警告:忽略无效分发 -p (c:\\python39\\lib\\site-packages) 警告:忽略无效分发 -ip (c:\\python39\\lib\\site-packages) 警告:忽略无效分发 - (c:\\python39\\lib\\site-packages) 安装成功 eth-brownie-1.14.6 警告:忽略无效分发 -p (c:\\python39\\lib\\site-packages) 警告:忽略无效分发 -ip (c:\\python39\\lib\\site-packages) 警告:忽略无效分发 - (c:\\python39\\lib\\site-packages)
解决方法
我发现修复的唯一方法是卸载 python 和所有软件包,然后重新安装它并确保它被选为控制面板中的路径 -> 系统 -> 系统 -> 高级系统设置 -> 环境变量 -> 路径
如果其他人在尝试修复 python 时遇到问题,我的建议是重新安装所有与 python 相关的东西,因为它很可能坏了,所以节省你的时间并重新开始
14、安装以太坊 Solidity 语言编译器

编译器 github 地址:https://github.com/ethereum/solc-js
1、安装:
npm install solc
2、写个任意的合约,保存为 sol 文件:
我的 TokenWeb3.sol,如下:
pragma solidity 0.4.16;
contract TokenWeb3 {
mapping (address => uint) public balancesOf;
address public owner;
//这里是创建合约的时候调用。msg.sender就是eth.account[0],也可以改编译后的代码指定。其他地方谁调用msg就是调用者
function TokenWeb3() {
owner = msg.sender;
balancesOf[msg.sender] = 10000;
}
//msg就是调用者
function transfer(address _to, uint _value) {
//避免转移出去的代币超过当前的存货
if (balancesOf[msg.sender] < _value) revert();
//避免自己调用自己,或者递归调用
if (balancesOf[_to] + _value < balancesOf[_to]) revert();
balancesOf[msg.sender] -= _value;
balancesOf[_to] += _value;
}
function mint(uint _amount) {
balancesOf[owner] += _amount;
}
}
3、运行命令,编译:
$ solc <contract>.sol --bin --abi --optimize -o <output-dir>/
我输出在当前目录的 test 下面,如下:
生成 abi 和 bin 文件。如下:
abi 文件是个 json 文件表示了只能合约的结构。如下:
bin 文件里面是一串数字。是合约的二进制哈希文件。
18、solidity 的 interface
interface 关键字:定义了一个接口。其他合同可以实现这个接口。
智能合约之间通过 interface 定义的方法互相调用
首先创建私链并启动:
创建私链
geth --datadir "./ethDev" init genesis.json
启动私链
geth -datadir "./ethDev" --rpc --rpcapi="db,eth,net,web3,personal" --networkid 15 console 2>test.log
启动 mist
mist.exe --rpc http://127.0.0.1:8545
一、简单的 interface 和其实现。
下面的合约实现了 interfaceContract 的接口。
pragma solidity ^0.4.16;
interface interfaceContract {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}
contract InterfaceImplContract is interfaceContract {
event Receive(address from, uint256 value, address token, bytes extraData);
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) {
Receive(_from,_value,_token,_extraData);
}
}
这里部署合约时,只需部署 InterfaceImplContract 即可,不用管接口。接口只是为了声明。如下:
二、调用接口。
下面的合约,想与实现了 interfaceContract 接口的合约进行交互。
pragma solidity ^0.4.16;
interface interfaceContract {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}
contract RemoteContract {
function func(address _addr, uint _value) {
//注意这里的_addr参数,需要填写tokenRecipient合约的地址。这里加载已经存在的智能合约。如何合约不存在会报错回滚。
interfaceContract _interfaceContract = interfaceContract(_addr);
_interfaceContract.receiveApproval(msg.sender, _value, address(this), "这是一些信息");
}
}
- 注意这里调用 func(address _addr, uint _value) 方法时,传递的参数_addr,在下面的代码中,用来加载合约 interfaceContract _interfaceContract = interfaceContract(_addr); 所以 addr 必须传递合约地址。并且这个合约地址是 interfaceContract 的实现类的合约地址。也就是第一步创建的 InterfaceImplContract 合约的地址。
- 如果传递的_addr 参数错误,调用失败。它将回滚所有已执行的功能。也就是这个方法会回滚。
- 这里部署时,只需部署 RemoteContract 即可。不用管接口。接口只是为了声明。
三、实际应用。
在官方代币合约中。就有实际的引用。如下:
pragma solidity ^0.4.16;
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }
contract TokenERC20 {
// 代币名
string public name;
// 代币logo
string public symbol;
// 代币小数位数
uint8 public decimals = 18;
// 18位小数是强烈建议的默认值,避免改变它
uint256 public totalSupply;
// 这将创建一个包含所有余额的数组
mapping (address => uint256) public balanceOf;
//某人授权给某人,使用自己的多少代币.
//比如:当前调用者msg.sender,可以授权给很多地址他代币的使用权限。
mapping (address => mapping (address => uint256)) public allowance;
// 代币转移日志
event Transfer(address indexed from, address indexed to, uint256 value);
// 销毁代币日志
event Burn(address indexed from, uint256 value);
/**
* 构造方法
*/
function TokenERC20(uint256 initialSupply,string tokenName,string tokenSymbol) public {
//10 ** uint256(decimals)是10^18次方。
totalSupply = initialSupply * 10 ** uint256(decimals); //初始化代币总数 使用 decimal,两个星号**表示次方。
balanceOf[msg.sender] = totalSupply; // 给创建者所有的初始化代币
name = tokenName; // 设置代币显示的名字
symbol = tokenSymbol; //设置代币显示的符合,代币logo
}
/**
* 代币转移, internal只能合约内部调用
*/
function _transfer(address _from, address _to, uint _value) internal {
// 防止传输到0x0地址。 使用burn()来代替
require(_to != 0x0);
// 检查发送方有足够代币
require(balanceOf[_from] >= _value);
// 防止溢出,超过uint的数据范围,会变为负数
require(balanceOf[_to] + _value > balanceOf[_to]);
// 保存以备将来的断言
uint previousBalances = balanceOf[_from] + balanceOf[_to];
// 发送方减掉代币
balanceOf[_from] -= _value;
// 接收方增加代币
balanceOf[_to] += _value;
Transfer(_from, _to, _value);//event 日志
// 断言用于使用静态分析来查找代码中的bug。 他们永远不会失败
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}
/**
* Transfer tokens
*
* @param _to 收币方地址
* @param _value 转移多少代币
*/
function transfer(address _to, uint256 _value) public {
_transfer(msg.sender, _to, _value);
}
/**
* 从其他地址转移代币,需要其他地址授权给调用的人。
*
*/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]); // 检查授权额度
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
/**
* 允许其他人,花费我的代币。
*
*授权给_spender地址,_value个代币
*
* @param _spender 授权给_spender地址
* @param _value 代币数
*/
function approve(address _spender, uint256 _value) public returns (bool success) {
allowance[msg.sender][_spender] = _value;
return true;
}
/**
* Set allowance for other address and notify
*
* 允许 `_spender` 代表你花费不大于`_value` 个代币, and then ping the contract about it
*
* @param _spender 授权给哪个地址
* @param _value 授权最大代币数量
* @param _extraData 一些额外的信息发送到批准的合同
*/
function approveAndCall(address _spender, uint256 _value, bytes _extraData)public returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
if (approve(_spender, _value)) {
spender.receiveApproval(msg.sender, _value, this, _extraData);
return true;
}
}
/**
* 销毁代币
*
* 从系统中不可逆地删除`_value''个代币
*/
function burn(uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value); //检查调用者金额大于销毁数量
balanceOf[msg.sender] -= _value; // 调用者代币减掉
totalSupply -= _value; // 总供应量减掉
Burn(msg.sender, _value); // event日志
return true;
}
/**
* 从其他账户销毁代币
*
*
* @param _from 从哪个账户销毁代币
* @param _value 销毁的代币数
*/
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value); // Check if the targeted balance is enough
require(_value <= allowance[_from][msg.sender]); // Check allowance
balanceOf[_from] -= _value; // Subtract from the targeted balance
allowance[_from][msg.sender] -= _value; // Subtract from the sender''s allowance
totalSupply -= _value; // 减掉总供应量
Burn(_from, _value); // event日志
return true;
}
}
这里的 approveAndCall 方法,就调用了接口。把自己的代币授权给某个合约接口。并且调用合约的后续处理方法。执行通知。
9、Solidity 的时间、单位转换。
以下这些以太币单位都是 solidity 中可以使用的关键词。
- ether
- finney
- szabo
- wei
Ether 的 Demo 合约
pragma solidity 0.4.10;
contract demo {
uint public balance;
function demo() {
balance = 1 ether;
}
function addFinney() {
balance += 1 finney;
}
function addSzabo() {
balance += 1 szabo;
}
function addWei() {
balance += 1 wei;
}
}
Time
有以下几种 Time 类型
- seconds
- minutes
- hours
- days
- weeks
- years
- now
Time 的 Demo 合约
pragma solidity 0.4.10;
contract demo {
uint public a;
function demo() {
// a = now;
a = 10000000000;
}
function addSeconds(uint num) {
a += num;
}
function addMinutes(uint num) {
a += num * 1 minutes;
}
function addHours(uint num) {
a += num * 1 hours;
}
function addDays(uint num) {
a += num * 1 days;
}
function addWeeks(uint num) {
a += num * 1 weeks;
}
function addYears(uint num) {
a += num * 1 years;
}
}
opencv python 轮廓属性/纵横比/Extent/Solidity/等效直径/掩模/极点
Contour Properties
1 纵横比
它是对象的边界矩形的宽度与高度的比率.
$$ Rspect Ratio = \frac{Width}{Height} $$
x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h
2 Extent
轮廓面积和外接矩形面积的比值
$$ Extent = \frac{Object Area}{Bounding Rectangle Area} $$
area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
3 Solidity
轮廓面积与凸包面积的比
$$ Extent = \frac{Contou Area}{Convex Hull Area} $$
area = cv.contourArea(cnt)
hull = cv.convexHull(cnt)
hull_area = cv.contourArea(hull)
solidity = float(area)/hull_area
4 等效直径
与轮廓面积相等的圆形的直径
$$ Equivalent Diameter = \sqrt{\frac{4 \times\;Contou Area}{Convex Hull Area}}\quad $$
area = cv2.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)
5 方向
方向是对象定向的角度。 以下方法还给出了主轴和短轴长度。
(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)
6 掩模和像素点
在某些情况下,我们可能需要包含该对象的所有点.可以这样做:
mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv2.findNonZero(mask)
这里,两个方法,一个使用Numpy函数,另一个使用OpenCV函数(最后一个注释行)给出相同的方法。 结果也相同,但略有不同。 Numpy以(行,列)格式给出坐标,而OpenCV以(x,y)格式给出坐标。 所以答案基本上会互换。 请注意,row = x和column = y.
7 最大值和最小值及它们的位置
我们可以使用掩模图像得到这些参数:
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(imgray,mask = mask)
8 平均颜色或平均强度
在这里,我们可以找到对象的平均颜色。 或者它可以是灰度模式下物体的平均强度。 我们再次使用掩模完成它.
ean_val = cv2.mean(im,mask = mask)
9 极点
目标最上面,最下面,最左边,最右边的点
leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])
今天的关于为 Solidity/python 安装布朗尼的问题的分享已经结束,谢谢您的关注,如果想了解更多关于14、安装以太坊 Solidity 语言编译器、18、solidity 的 interface、9、Solidity 的时间、单位转换。、opencv python 轮廓属性/纵横比/Extent/Solidity/等效直径/掩模/极点的相关知识,请在本站进行查询。
本文标签: