工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.51099.com 注册 | 登陆
浏览模式: 标准 | 列表2018年01月的文章

ssh普通用户目录限制根目录

 Subsystem sftp internal-sftp

Match User dist
ChrootDirectory /var/www/html
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

以太坊客户端Geth命令用法-参数详解

以太坊客户端Geth命令用法-参数详解

 

 

https://www.cnblogs.com/tinyxiong/p/7918706.html

以太坊开发框架truffle以及testrpc注意事项

 环境版本:

Truffle v3.4.9 (core: 3.4.8)
Solidity v0.4.15 (solc-js)
EthereumJS TestRPC v4.1.1 (ganache-core: 1.1.2)
 
问题:通过Truffle和TestRPC生成测试环境以后,无法通过IP地址访问环境,而只能在本机通过localhost访问
解决方案:修改testrpc和truffle环境的三个地方

1.修改truffle生成的web框架文件里面的truffle.js文件
a96921164cd81032b7e497aa66e24e992f79c652
2.使用###>testrpc -h 0.0.0.0命令启动testrpc
3.修改truffle文件的webpack.config.js文件
c4a8a7a490ac82b3a6dac99d9ce6e1ca475b8f9f
具体全部命令

1. >mkdir myproject  

2. >cd myproject  

3. >truffle init webpack


修改完成,需要重新编译

     >truffle compile -all

4.   >truffle migrate

5.   >testrpc -h 0.0.0.0(请在另一个终端下运行这个命令)

6.   >npm run dev

来自ETH源码,手动生成以太坊钱包,ERC20标准钱包

 安装完成后用node自带的npm(node package manger)下载两个依赖: 椭圆加密算法包,keccak哈希包

npm install secp256k1 
npm install keccak

进入node交互界面

node

执行node脚本

 //引入包  const secp256k1 = require("secp256k1/elliptic")  const createKeccakHash =  require("keccak")  const crypto = require('crypto')   // 生成私钥  const privateKey = crypto.randomBytes(32)  // 生成公钥  const publicKey = secp256k1.publicKeyCreate(privateKey, false).slice(1)  // 生成地址  const address = createKeccakHash("keccak256").update(publicKey).digest().slice(-20)   // 查看结果  privateKey.toString('hex')  address.toString('hex')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

以上代码在 Imtoken钱包 导入成功, 并能够正常使用,即 核对导入后的钱包address与 脚本生成的address一致

ERC20 Token标准接口

下是一个接口合同,声明所需的功能和事件以符合ERC20标准:

 

// https://github.com/ethereum/EIPs/issues/20

  contract ERC20 {

      function totalSupply() constant returns (uint totalSupply);

      function balanceOf(address _owner) constant returns (uint balance);

      function transfer(address _to, uint _value) returns (bool success);

      function transferFrom(address _from, address _to, uint _value) returns (bool success);

      function approve(address _spender, uint _value) returns (bool success);

      function allowance(address _owner, address _spender) constant returns (uint remaining);

      event Transfer(address indexed _from, address indexed _to, uint _value);

      event Approval(address indexed _owner, address indexed _spender, uint _value);

    }

大部分Ethereum主要标记符合ERC20标准。

 

一些令牌包括描述令牌合同的进一步信息:

 

string public constant name = "Token Name";

string public constant symbol = "SYM";

uint8 public constant decimals = 18;  // 大部分都是18

如何工作?

 

以下是令牌合约的一个片段,用于演示令牌合约如何维护Ethereum帐户的令牌余额

 

contract TokenContractFragment {

 

     // Balances 保存地址的余额

     mapping(address => uint256) balances;

 

     // 帐户的所有者批准将金额转入另一个帐户

     mapping(address => mapping (address => uint256)) allowed;

 

      // 特定帐户的余额是多少?

      function balanceOf(address _owner) constant returns (uint256 balance) {

          return balances[_owner]; //从数组中取值

      }

 

      // 将余额从所有者帐户转移到另一个帐户

      function transfer(address _to, uint256 _amount) returns (bool success) {

          //判断条件 发送者余额>=要发送的值  发送的值>0  接收者余额+发送的值>接收者的余额

          if (balances[msg.sender] >= _amount 

              && _amount > 0

              && balances[_to] + _amount > balances[_to]) {

              balances[msg.sender] -= _amount;   //发送者的余额减少

              balances[_to] += _amount;         //接收者的余额增加

              return true;

         } else {

              return false;

          }

      }

 

      // 发送 _value 数量的token从地址 _from 到 地址 _to

      // transferFrom方法用于提取工作流程,允许合同以您的名义发送令牌,例如“存入”到合同地址和/或以子货币收取费用; 该命令应该失败,除非_from帐户通过某种机制故意地授权消息的发送者; 我们提出这些标准化的API来批准:

      function transferFrom(

          address _from,

          address _to,

          uint256 _amount

     ) returns (bool success) {

          //和上面一样的校验规则

          if (balances[_from] >= _amount

              && allowed[_from][msg.sender] >= _amount

              && _amount > 0

              && balances[_to] + _amount > balances[_to]) {

              balances[_from] -= _amount;

              allowed[_from][msg.sender] -= _amount; //减少发送者的批准量

              balances[_to] += _amount;

              return true;

         } else {

             return false;

          }

      }

 

      // 允许_spender多次退出您的帐户,直到_value金额。 如果再次调用此函数,它将以_value覆盖当前的余量。

      function approve(address _spender, uint256 _amount) returns (bool success) {

          allowed[msg.sender][_spender] = _amount; //覆盖当前余量

          return true;

      }

  }

 

http://blog.csdn.net/diandianxiyu_geek/article/details/78082551?utm_source=gold_browser_extension