
49万USDT钱包资产被转走之到底是不是朋友干的?
话题背景wu351256@discord 有谁知道我的代币为什么会在我不知情的情况下下被转走,我查记录上面说是触发了什么智能合约。我是新手有大神带我理解一下嘛? 如果是触发了什么智能合约怎么找到这个合约并且解除合约进入正题@bmlcwenwu 是不是点了什么钓鱼链接?赶快去解除授权 @42069Imtoken里边有教程,先解除授权 @夜与昼 这种币被盗了,报警说不立案,imtoken客服说报警,投诉无门,欲哭无泪 @42069 国内加密货币属于非法,警察不立案。 @夜与昼 对啊,国内,我被盗了49万usdt夜与昼 @42069 这么多U,没想到用冷钱包吗 @夜与昼 我最后一次转账用我朋友的id下载的app,现在就是不知道会不会是他盗的 @42069 什么app? @夜与昼 Imtoken钱包 @42069 不是假的吧 @夜与昼 用他的id后,商城里下载的,登录进去给他转了一笔钱,一个星期后钱包被盗 @42069 登录之后退出id了吗?只是商城登录id没事 夜与昼登录后退出了,登录的时候还双重认证了, *[2:39 PM]*Icloud就会自动登陆 *[2:39 PM]*Iclou...
Etherscan事务交易详细分类
TransferERC21https://cn.etherscan.com/tx/0xc261caa5556785d46fbf5f715f4e5686288304a5a510d34336d763b060dc37b6Swap案例1: https://cn.etherscan.com/tx/0xf09f3b3dcd29552dac6fd14040bb457f3f462ab497dd4a885fcf1bcc026f10ff https://cn.etherscan.com/tx/0x23fdb4a895877af5d2091d541d05f6ae874267c8d82e73bb7f186d8839781c92ApproveERC20ERC721ERC1159https://cn.etherscan.com/tx/0x00ff492f7c93e50b47c1c341d935e5d5cac201455d7d7f8a491fd5f0a7d93746MintERC721MethodID: 0xa0712d68Function: mint(uint256 _mintAmount) MethodI...

以太坊签名验签原理揭秘
签名三大作用讨论密码学中的签名时,我们其实是在讨论所有权、有效性和完整性证明。举例来说,这些签名可以用来:证明你拥有地址的私钥(即认证功能);确保信息(例如,邮件)没有被篡改;验证你下载的 文件是合法有效的。签名基础原理:基于数学公式输入:一个输入消息、一个私钥和一个(通常情况下是秘密的)随机数,就可以得到一串数字作为输出值,也就是签名。 输出:使用另一个数学公式可以进行反向计算,在不知道私钥和随机数的情况下进行验证(译者注:即验证该签名是否出自跟某个公钥对应的私钥)。 这类算法有很多,如 RSA 和 AES,但是以太坊(和比特币)采用的都是椭圆曲线数字签名算法(ECDSA)。请注意,ECDSA 只是签名算法。与 RSA 和 AES 不同,这种算法不能用于加密。以太坊采用的是 secp256k1曲线。 签名方案由哈希算法和签名算法组成。以太坊选择的签名算法是secp256k1,哈希算法选择了keccak256,这是一个从字节串。不可逆计算通过椭圆曲线点乘算法(elliptic curve point manipulation),我们可以使用私钥计算出一个不可逆向计算的值(译者注:...
The infinite past has the present as its destination, and the infinite future has the present as its origin.

49万USDT钱包资产被转走之到底是不是朋友干的?
话题背景wu351256@discord 有谁知道我的代币为什么会在我不知情的情况下下被转走,我查记录上面说是触发了什么智能合约。我是新手有大神带我理解一下嘛? 如果是触发了什么智能合约怎么找到这个合约并且解除合约进入正题@bmlcwenwu 是不是点了什么钓鱼链接?赶快去解除授权 @42069Imtoken里边有教程,先解除授权 @夜与昼 这种币被盗了,报警说不立案,imtoken客服说报警,投诉无门,欲哭无泪 @42069 国内加密货币属于非法,警察不立案。 @夜与昼 对啊,国内,我被盗了49万usdt夜与昼 @42069 这么多U,没想到用冷钱包吗 @夜与昼 我最后一次转账用我朋友的id下载的app,现在就是不知道会不会是他盗的 @42069 什么app? @夜与昼 Imtoken钱包 @42069 不是假的吧 @夜与昼 用他的id后,商城里下载的,登录进去给他转了一笔钱,一个星期后钱包被盗 @42069 登录之后退出id了吗?只是商城登录id没事 夜与昼登录后退出了,登录的时候还双重认证了, *[2:39 PM]*Icloud就会自动登陆 *[2:39 PM]*Iclou...
Etherscan事务交易详细分类
TransferERC21https://cn.etherscan.com/tx/0xc261caa5556785d46fbf5f715f4e5686288304a5a510d34336d763b060dc37b6Swap案例1: https://cn.etherscan.com/tx/0xf09f3b3dcd29552dac6fd14040bb457f3f462ab497dd4a885fcf1bcc026f10ff https://cn.etherscan.com/tx/0x23fdb4a895877af5d2091d541d05f6ae874267c8d82e73bb7f186d8839781c92ApproveERC20ERC721ERC1159https://cn.etherscan.com/tx/0x00ff492f7c93e50b47c1c341d935e5d5cac201455d7d7f8a491fd5f0a7d93746MintERC721MethodID: 0xa0712d68Function: mint(uint256 _mintAmount) MethodI...

以太坊签名验签原理揭秘
签名三大作用讨论密码学中的签名时,我们其实是在讨论所有权、有效性和完整性证明。举例来说,这些签名可以用来:证明你拥有地址的私钥(即认证功能);确保信息(例如,邮件)没有被篡改;验证你下载的 文件是合法有效的。签名基础原理:基于数学公式输入:一个输入消息、一个私钥和一个(通常情况下是秘密的)随机数,就可以得到一串数字作为输出值,也就是签名。 输出:使用另一个数学公式可以进行反向计算,在不知道私钥和随机数的情况下进行验证(译者注:即验证该签名是否出自跟某个公钥对应的私钥)。 这类算法有很多,如 RSA 和 AES,但是以太坊(和比特币)采用的都是椭圆曲线数字签名算法(ECDSA)。请注意,ECDSA 只是签名算法。与 RSA 和 AES 不同,这种算法不能用于加密。以太坊采用的是 secp256k1曲线。 签名方案由哈希算法和签名算法组成。以太坊选择的签名算法是secp256k1,哈希算法选择了keccak256,这是一个从字节串。不可逆计算通过椭圆曲线点乘算法(elliptic curve point manipulation),我们可以使用私钥计算出一个不可逆向计算的值(译者注:...
The infinite past has the present as its destination, and the infinite future has the present as its origin.

Subscribe to Renaissance Labs

Subscribe to Renaissance Labs
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers

Solidity中,有两种类型的数组:存储数组和内存数组。
这些数组被声明为状态变量,并且可以具有固定长度或动态长度。动态存储数组可以调整数组的大小,它们通过访问
push()和pop()方法来调节长度。
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract A { uint256[] public numbers;// 动态长度数组 address[10] private users; // 固定长度数组 uint8 users_count;
function addUser(address _user) external {
require(users_count < 10, "number of users is limited to 10");
users[users_count] = _user;
users_count++;
}
function addNumber(uint256 _number) external {
numbers.push(_number);
}
这些数组以
memory作为其数据位置声明。它们也可以具有固定长度或动态长度,但是不能调整动态大小的内存数组的大小(即,不能调用push()和pop()方法),数组的大小必须预先计算。也可以使用new关键字声明动态大小的内存数组。
Type[] memory a = new Type
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract B {
function createMemArrays() external view {
uint256[20] memory numbers;
numbers[0] = 1;
numbers[1] = 2;
uint256 users_num = numbers.length;
address[users_num] memory users1; // 错误 : 应该是整数常量或常量表达式
address[] memory users2 = new addressUnsupported embed;
users2[0] = msg.sender; // OK
users2.push(msg.sender); // 错误 : member push is not available
}
}
注意,numbers[0] = 1; 因为根据内存中布局的描述,array将指向零插槽,因此切勿写入。请记住,在使用数组之前,请务必先对其进行初始化,以便获取有效的地址。
数组切片只能与
calldata数组一起使用,形式为x[start:end]。切片的第一个元素是x [start],最后一个元素是x[end-1]。开始和结束都是可选的:开始默认为0,结束默认为数组的长度。
这些数组可以保存任意长度的原始字节数据。
区别在于,byte []遵循数组类型的规则,并且如文档 Solidity中的内存数组的描述,数组的元素总是占据32个字节的倍数。这意味着如果一个元素的长度小于32字节的倍数,则将对其进行填充,直到其适合所需的大小为止。对于byte数组,每个元素将浪费31个字节。值得说明的是,从内存中读取或写入一个字(32个字节)会消耗 3 gas,这就是为什么建议使用bytes而不是byte[]的原因。
而bytes或string不是这种情况。string字符串是UTF-8数据的动态数组。与其他语言相反,Solidity中的string不提供获取字符串长度或执行两个字符串的连接或比较的功能(需要使用库)。 可以使用bytes()将字符串转换为字节数组。这将返回字符串的UTF-8表示形式的低级字节。 注意:可以将一个字符编码为一个以上的字节,因此字节数组的长度不一定是字符串的长度。 string与bytes 文档的大多数使用bytes32而不是string,并且如果可以限制字符串的字节数,则应该使用值类型bytes1 ... bytes32,因为便宜得多。

Solidity中,有两种类型的数组:存储数组和内存数组。
这些数组被声明为状态变量,并且可以具有固定长度或动态长度。动态存储数组可以调整数组的大小,它们通过访问
push()和pop()方法来调节长度。
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract A { uint256[] public numbers;// 动态长度数组 address[10] private users; // 固定长度数组 uint8 users_count;
function addUser(address _user) external {
require(users_count < 10, "number of users is limited to 10");
users[users_count] = _user;
users_count++;
}
function addNumber(uint256 _number) external {
numbers.push(_number);
}
这些数组以
memory作为其数据位置声明。它们也可以具有固定长度或动态长度,但是不能调整动态大小的内存数组的大小(即,不能调用push()和pop()方法),数组的大小必须预先计算。也可以使用new关键字声明动态大小的内存数组。
Type[] memory a = new Type
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract B {
function createMemArrays() external view {
uint256[20] memory numbers;
numbers[0] = 1;
numbers[1] = 2;
uint256 users_num = numbers.length;
address[users_num] memory users1; // 错误 : 应该是整数常量或常量表达式
address[] memory users2 = new addressUnsupported embed;
users2[0] = msg.sender; // OK
users2.push(msg.sender); // 错误 : member push is not available
}
}
注意,numbers[0] = 1; 因为根据内存中布局的描述,array将指向零插槽,因此切勿写入。请记住,在使用数组之前,请务必先对其进行初始化,以便获取有效的地址。
数组切片只能与
calldata数组一起使用,形式为x[start:end]。切片的第一个元素是x [start],最后一个元素是x[end-1]。开始和结束都是可选的:开始默认为0,结束默认为数组的长度。
这些数组可以保存任意长度的原始字节数据。
区别在于,byte []遵循数组类型的规则,并且如文档 Solidity中的内存数组的描述,数组的元素总是占据32个字节的倍数。这意味着如果一个元素的长度小于32字节的倍数,则将对其进行填充,直到其适合所需的大小为止。对于byte数组,每个元素将浪费31个字节。值得说明的是,从内存中读取或写入一个字(32个字节)会消耗 3 gas,这就是为什么建议使用bytes而不是byte[]的原因。
而bytes或string不是这种情况。string字符串是UTF-8数据的动态数组。与其他语言相反,Solidity中的string不提供获取字符串长度或执行两个字符串的连接或比较的功能(需要使用库)。 可以使用bytes()将字符串转换为字节数组。这将返回字符串的UTF-8表示形式的低级字节。 注意:可以将一个字符编码为一个以上的字节,因此字节数组的长度不一定是字符串的长度。 string与bytes 文档的大多数使用bytes32而不是string,并且如果可以限制字符串的字节数,则应该使用值类型bytes1 ... bytes32,因为便宜得多。
No activity yet