区块链钱包科普知识(含钱包相关功能代码)

商务WX:lqc0763
第一:什么是钱包,它有分不同类型哦

狭义上数字资产钱包为私钥存储工具,广义上含余额查询、发送交易等基本功能

区块链钱包是用于存储虚拟货币的工具或者APP,它原理上是记录公钥和私钥的工具

区块链钱包科普知识(含钱包相关功能代码)_第1张图片

on-chain(连上钱包)
给一个钱包地址发送数字货币, 这笔交易在全网广播、被确认、被打包进区块。这是发生在链上的,被称为on-chain交易。on-chain钱包需要自己保管私钥。

off-chain(连下钱包)
相对于on-chain交易是off-chain交易。通常,通过交易所进行的交易是off-chain的,本人并没有私钥。私钥在交易所,由交易所托管。所以交易所的钱包也是中心化的钱包。

冷钱包
冷即离线、断网,也就是说私钥存储的位置不能被网络所访问。例如纸钱包、脑钱包、硬件钱包等等。 硬件冷钱包的存储功能类似于硬盘,但它交易时,需要支付密码,并且随机生成强种子密码来获得私钥和地址,且每一笔交易进行数字签名备注,随时可查;联网端APP可进行联网查询最新行情与资讯,公开透明信息,自动检测交易确认情况,且永不接触私钥,安全无忧。

热钱包
热即联网,也就是私钥存储在能被网络访问的位置。 例如存放在交易所的、在线钱包网站、手机App钱包都属于热钱包。通常而言,冷钱包更加安全,热钱包使用更加方便。不用自己管理了,变现也相对容易。分叉和换网(比如Qtum和EOS)都由交易所处理了。

全节点钱包
【例子:BTC钱包客户端】这类钱包同时也是一个完整的区块链节点,会下载整个区块链数据,并验证每一笔交易(以太坊的话还会运行每一个智能合约交易)。 除了保存私钥外,全节点钱包还有保存了所有区块的数据,最为著名的是bitcoin-core。

轻钱包
【例子:】它不必保存所有区块的数据,只保存跟自己相关的数据。基本可以实现去中心化。这类钱包的Private Key至少是用户自己手里的,安全性更好一些,而且非常简单易用。轻钱包现在有: Bitcoin Electrum, 以太的MyEtherWallet, imtoken 和 Jaxx。

中心化钱包
在交易所中的钱包,以及类似 OKLink 提供的保险柜服务。

第二:不同类型钱包它的优点和缺点

on-chain连上钱包,

优点:资产都在连上进行流动,无法篡改 安全性更高

缺点:连上钱包转账等需要时效更高,转账费用不可自己选择,不可控,普遍费用比钱包工具更高

连下钱包

优点:交易速度非常快,

缺点:容易遭黑客篡改导致资产丢失,可能遇到无法提币情况,团队可能动用用户资产进行更多投资或者使用

冷钱包

优点:冷钱包指的是,将私钥记录在不直接联网的地方,例如:纸上、硬盘、U盘这类硬件,硬件钱包的优势是把私钥和交易签名都放在了USB设备上。所以即使电脑被黑被偷,钱包安全不受任何影响。另外你可以在多台设备上使用,同样能够有很好的安全性冷钱包

缺点:转账的话需要更多流程,相对来说较为麻烦,适合大资产用户

多功能媒体钱包:优点:集成很多媒体功能,使得我们不需要安装过多的区块链相关程序,一个客户端可以解决我们大多数的区块链信息获取和钱包管理 缺点:APP相对较大,稳定性不强;

社交媒体钱包:具备社交功能,方便与用户之间互相交流,项目方还可以通过钱包与用户产生沟通和交流推进整个项目。 缺点:APP安装包相对较大,稳定性不强

第三:如何正确选择您所需要的钱包

第一:需求,纯钱包? 还是多功能钱包?

第二:资金安全程度?超大额存放?低额度存放?

第三:钱包安排级别,和建议选择用户

安全性; 使用体验; 有趣的玩法 ;是否有持续让我使用的功能;

第四:那些功能,钱包应该拥有,并且在确保安全性和运行稳定性的前提下能够为我们提供更多服务

行情服务(尽量是用户手动添加,或者根据大数据,默认展示前10个热度项目)

社交服务

糖果服务

第五:钱包在项目运营起什么作用

出众的用户体验,可以很好的提升用户粘度,钱包方可以拓展很多项目,流动资金才有活力

第六:如何发掘钱包更多的功能或者用户转化

1:闪兑功能:利用ERC20智能转账,快速兑换其他代币,无需将币充值到交易平台再进行兑换,安全性和便捷性更高

2:切入金融业务之稳健型理财(参考:http://www.007lc.com/post/2668.html)

3:钱包另一精准导流场景,是空投和领糖果。平常在微信群里各项目的“撒币”获客活动,体验不好,既要手动填写公钥地址,还要输入个人信息。如果在钱包里操作,一键授权钱包资料,整个过程的体验更好

为寻求收入来源,各钱包纷纷推出周边增值服务,一方面为增加用户黏性,提高流量入口,另一方面也试图增加收入来源。如提供理财、资讯、POS挖矿、交易、资产聚合等功能。目前有65%的数字资产钱包项目都提供附加功能,如图1.9所示

区块链钱包科普知识(含钱包相关功能代码)_第2张图片

第七:如何确保钱包安全,丢失后如何找回自己的虚拟货币

钱包安全::①软件层面验证密码/指纹/人脸 通过后进入钱包 ②支付密码键盘随机变动

丢失后:①使用注册时候记录好的钱包助记词可以恢复钱包,里面含有的虚拟币因此也不会丢失

②注册时候妥善保管好您的助记词,以便特殊情况出现可以快速确保资产安全

第八:目前市面上的主流钱包和安全性和有趣的功能有那些?

imtoken

mytoken

火币钱包

文章节选:火币区块链产业专题报告:钱包篇
第九:BIP32,BIP39,BIP44,BIP49
BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等。

图片: https://github.com/bitcoin/bips/raw/master/bip-0032/derivation.png

BIP39:将 seed 用方便记忆和书写的单字表示。一般由 12 个单字组成,称为 mnemonic code(phrase),中文称为助记词或助记码

图片: https://images-cdn.shimo.im/i1Wu28wf7EU0kuFi/image.png

BIP44:基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。让同一个 seed 可以支援多币种、多帐户等。各层定义如下:
m / purpose’ / coin_type’ / account’ / change / address_index

图片: https://images-cdn.shimo.im/WJcnzTCSPB89PtgV/image.png

BIP49: 定义HD钱包的派生方案,使用P2WPKH嵌套在P2SH(BIP 141)序列化格式进行隔离证人交易

图片: https://images-cdn.shimo.im/UwYtfoQCbigvKayX/image.png
第十:ETH
1.生成助记词 私钥 公钥 keystore 地址
const bip39 = require(‘bip39’);
const eip55 = require(‘eip55’);
const config = require(’…/config/config’)
const hdkey = require(’…/hdkey/hdkey’);
const util = require(‘ethereumjs-util’);
const keythereum = require(’…/keythereum/keythereum’);

exports.privateToKeyStore = (password, privateKey) => {
let params = { keyBytes: 32, ivBytes: 16 };
let dk = keythereum.create(params);
return JSON.stringify(keythereum.dump(password, privateKey, dk.salt.toString(‘hex’), dk.iv.toString(‘hex’), config[‘keyStoreOptions’]));
};

exports.keyStoreToPrivate = (password, keyObject) => {
return (keythereum.recover(password, keyObject)).toString(‘hex’);
};

exports.generateMnemonic = () => {
return bip39.generateMnemonic();
};

exports.mnemonicToEthPrivate = (mnemonic) => {
let seed = bip39.mnemonicToSeed(mnemonic);
let hdWallet = hdkey.fromMasterSeed(seed);
let key = hdWallet.derivePath(“m/44’/60’/0’/0/0”);
return key._hdkey._privateKey.toString(‘hex’);
};

exports.mnemonicToEthAddress = (mnemonic) => {
let seed = bip39.mnemonicToSeed(mnemonic);
let hdWallet = hdkey.fromMasterSeed(seed);
let key = hdWallet.derivePath(“m/44’/60’/0’/0/0”);
return eip55.encode(“0x” + (util.pubToAddress(key._hdkey._publicKey, true)).toString(‘hex’));
};

exports.privateKeyToAddress = (privateKey) => {
return ‘0x’ + util.privateToAddress(Buffer.from(privateKey, ‘hex’)).toString(‘hex’);
};
2.发起eth和erc20交易
const Tx = require(“ethereumjs-tx”);
const sha3 = require(’…/utils/sha3’);
const infura = require(’…/utils/infura’);
const Promise = require(“bluebird”);
let transfer = {};

transfer.transferEth = (fromAddress, toAddress, privateKey, amount, gasPrice, gasLimit) => {
return new Promise((resolve, reject) => {
infura.getNonce(fromAddress).then(nonce => {
infura.getGasPrice().then(gasPrice => {
let value = ‘0x’ + (Math.pow(10, 18) * amount).toString(16);
let rawTransaction = {
from: fromAddress,
nonce: nonce,
gasPrice: gasPrice,
gasLimit: gasLimit,
to: toAddress,
value: value,
};
let tx = new Tx(rawTransaction);

            tx.sign(Buffer.from(privateKey, 'hex'));

            let serializedTx = tx.serialize();
            let data = "0x" + serializedTx.toString('hex');
            infura.request('eth_sendRawTransaction', [data]).then(res =>{
                resolve(res);
            }).catch(e => {
                reject(e);
            });
        });
    });
});

};

transfer.transferErc = (fromAddress, toAddress, contractAddress, privateKey, amount, gasPrice, gasLimit) => {
return new Promise((resolve, reject) => {
infura.getNonce(fromAddress).then(nonce => {
infura.getDecimals(contractAddress).then(decimals => {
let amountHex = ‘0’.repeat(64 - (Math.pow(10, parseInt(decimals)) * amount).toString(16).length) + (Math.pow(10, parseInt(decimals)) * amount).toString(16);
let rawTransaction = {
nonce: nonce,
gasPrice: gasPrice,
gasLimit: gasLimit,
to: contractAddress,
value: “0x00”,
data: ‘0x’ + sha3(“transfer(address,uint256)”).substr(0, 8) + ‘000000000000000000000000’ + toAddress.substr(2) + amountHex
};
let tx = new Tx(rawTransaction);

            tx.sign(Buffer.from(privateKey, 'hex'));

            let serializedTx = tx.serialize();
            let data = "0x" + serializedTx.toString("hex");
            infura.request('eth_sendRawTransaction', [data]).then(res =>{
                resolve(res);
            }).catch(e => {
                reject(e);
            });
        });
    });
});

};

module.exports = transfer;
第十一:BTC
正在开发中
第十二:开发指南
##dev

  • chain.so
  • walletgenerator.net
  • bitcore
  • mnemonic-bip39
  • bip32
  • hdwallet

##api

  • usdt_api
  • btc_api
  • eth_api

##imtoken

  • 闪兑
  • tokenlon (0x.js) WETH
  • Dapp api

广州闪链区希望道友们在看完这篇区块链钱包科普知识,能给出自己宝贵的意见和建议;也希望如果有对这款产品感兴趣的项目方,为方面互相交流,请留下您的联系方式,

你可能感兴趣的:(区块链钱包科普知识(含钱包相关功能代码))