A. 以太坊web3.sendRawTransaction離線簽名交易
工作中需要復現短地址攻擊和the重入攻擊,重入攻擊可以直接通過eth.sendTransaction和remix來發送交易,但是短地址攻擊由於錢包和remix這些都對input做了長度檢測,無法通過這些方式來復現,只能通過發離線簽名交易來實現。
1.環境依賴:nodejs , keythereum , ethereumjs-common , ethereumjs-tx 。
2.進入Node控制台,獲取相應賬戶私鑰。
3.簽名交易,進入Node,這里注意nonce問題,需要Nonce是實際可執行的nonce,Nonce不對會發送交易失敗,關於如何獲取input data網路比較多就不詳述了。
4.遇到的坑,網路出來的步驟是有問題的或者過時了,當時是參考的這篇文章, https://www.freebuf.com/articles/blockchain-articles/199903.html
,在控制台通過eth.sendRawTransaction發送簽名好的交易,我遇到了這個錯誤 ** sendRawTransaction invalid sender **
B. 使用Nodejs部署智能合約
實現智能合約的方式很多種,可以用truffle框架來實現,編譯,部署。
這里介紹一種簡單的使用nodejs來實現,編譯,部署的方法。
創建一個nodejs項目,實現一個簡單的智能合約。
這個合約實現了一個造幣和轉幣的邏輯。
我們的合約是運行在evm上面的位元組碼,solidity是靜態語言,需要通過編譯器生成evm的位元組碼。
調用 node compile.js ,對BaseToken進行編譯,生成位元組碼。web3中提供了一個部署合約的介面,使用如下,
利用編譯生成的abi和bytecode,創建一個合約對象,然後進行發布,等待著非同步執行的方法輸出合約地址 contractAddress ,這樣就完成了部署。不過這種方式有一個問題,就是在發布合約時,你的私鑰處於聯網狀態,
處於安全策略,我們需要盡量避免私鑰在聯網狀態。
以太坊上部署合約是向空地址發送一個附有位元組碼的簽名交易,其中發送者就是這個合約的擁有者。因此我們只需要將合約構建成一筆交易,我們在無網狀態下對這筆交易進行簽名,然後將簽名發送到以太坊網路中。這樣能夠降低我們私鑰被泄漏的風險。
對合約的簽名方法如下:
以上對一個合約簽名,這里需要注意的問題是,to的地址需要是,空地址。
完成簽名之後,我們把這筆交易發送出去就好,最簡單的方法就是使用 etherscan的發送Tx的方式 ,一旦發送完成,部署完成,就可以看到合約地址。
C. eth錢包開發(nodejs)(一)
tips: sendEthTransaction方法將eth轉賬和token轉賬合並,轉賬eth時將tokenValue賦值為0,轉賬token時將value賦值為0即可
D. 如何使用node.js web開發
第二步:安裝nodejs 載完雙擊 node-v0.吧.依陸-x吧陸.msi始安裝nodejs默認安裝C:\Program Files\nodejs面 第三步:安裝相關環境 打C:\Program Files\nodejs目錄發現面自帶npm,直接用npm安裝相環境既 進入node.js command prompt 命令窗口 進入nodejs 安裝目錄 C:\Program Files\nodejs 鍵入命令:cd C:\Program Files\nodejs 既 現始安裝相關環境 鍵入命令:npm install express 車等待安裝express........ 鍵入命令:npm install jade 車等待安裝jade........ 鍵入命令:npm install mysql車等待安裝mysql........ ........安裝組件取決於環境搭建需求 默認情況述組件都安裝C:\Program Files\nodejs\node_moles文件夾 nodejs相關組件自查找路徑 第四步:創建工程 現已經express express命令安裝全局才起作用! 所express安裝候要用 npm install express -g 或者直接修改全局路徑: npm config set prefix "C:\Program Files\nodejs" npm config set cache "C:\Program Files\nodejs\cache" (先建cache目錄) 鍵入:express myapp (myapp隨意起工程名稱) 發現 C:\Program Files\nodejs\myapp 目錄 默認情況:自創建 幾文件做解釋相信發經驗同都能眼明 復制node_molesmyapp面 環境搭建完工面做demo測試 myapp新建helloworld.js var http = require("http"); http.createServer(function(request, response) { response.writeHead(貳00, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(吧吧吧吧); console.log("nodejs start listen 吧吧吧吧 port!"); 進入node.js command prompt 命令窗口,進入C:\Program Files\nodejs\myapp目錄 鍵入node helloworld.j
E. 如何使用nodejs搭建開發環境
1.安裝NodeJS
1.編譯環境
源代碼編譯器,通常 Unix/Linux平台都自帶了C++的編譯器(GCC/G++)。如果沒有,請通過當前發行版的軟體包安裝工具安裝make,g++這些編譯工具。
Debian/Ubuntu下的工具是apt-get
RedHat/centOS下通過yum命令
Mac OS X下你可能需要安裝xcode來獲得編譯器
2.網路加密
其次,如果你計劃在Node.js中啟用網路加密,OpenSSL的加密庫也是必須的。該加密庫是libssl-dev,可以通過apt-get install libssl-dev等命令安裝。
3.手動編譯
wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
tar zxvf node-v0.6.1.tar.gz
cd node-v0.10.26
./configure
上面幾行命令是通過wget命令下載最新版本的代碼,並解壓之。./configure命令將會檢查環境是否符合Nodejs的編譯需要。
make
make install
2.安裝NPM
1.NPM的全稱是Node Package Manager, 是NodeJs的第三方安裝庫。
curl http://npmjs.org/install.sh | sh
curl http://npmjs.org/install.sh是通過curl命令獲取這個安裝shell腳本,按後通過管道符| 將獲取的腳本交由sh命令來執行。
2.更改第三方庫
npm install underscore
[email protected] ./node_moles/underscore
由於一些特殊的網路環境,直接通過npm install命令安裝第三方庫的時候,經常會出現卡死的狀態。幸運的是國內CNode社區的@fire9 同學利用空餘時間搭建了一個鏡像的NPM資源庫,伺服器架設在日本,可以繞過某些不必要的網路問題。你可以通過以下這條命令來安裝第三方庫:
npm --registry "http://npm.hacknodejs.com/
如果你想將它設為默認的資源庫,運行下面這條命令即可:
npm config set registry "http://npm.hacknodejs.com/ "
通過npm安裝包。安裝好之後會自動被安裝到 /usr/local/bin 目錄下,而相依的函式庫也會自動安裝到 /usr/local/lib/node 目錄下,實在是非常方便。
3.安裝NodeJS調試環境
1.用npm命令安裝全局模式的 node-inspector組件
sudo npm install -g node-inspector
2.更改埠
修改 node-inspector/lib/config.js的埠
』web-port』: {
desc: 『Port to host the inspector』,
convert: conversions.stringToInt,
defaultValue: 6868
},
3.使用
node-inspector啟動一個調試工具
在chrome瀏覽器中輸入http://127.0.0.1:6868/debug?port=5858打開chrome的調試模式
使用node debug調試nodeJS項目
node --debug-brk=5858 read.js
可以在chrome中查看到調試信息
4.使用Sublime構建NodeJS
設置Sublime的Builder->>
Tools ->> Build System ->> New Build System
將如下代碼寫入
{
「cmd」: ["/usr/local/bin/node", 「$file」],
「file_regex」: 「^[ ]File "(…?)」, line ([0-9]*)",
「selector」: 「source.javascript」
}
保存為NodeJs.sublime-build文件
如此可以直接使用Com+B來使用nodejs運行程序
F. 區塊鏈技術入門,涉及哪些編程語言
技術與語言無關。正常情況下同樣的技術,在有許可權的情況下多數語言都可以實現同樣的功能。
你說的應該是虛擬幣上的技術,這個源碼通常是C++開發的。
G. 如何利用nodejs搭建一個框架
獲取Node安裝包,可以訪問以下Node.js框架官方網址:
在該頁面中,我們可以看到適用於不同操作系統的、各個版本的Node安裝包源文件,選中我們需要的版本類型直接下載就可以了。
2
在Windows操作系統環境下安裝Node.js框架,直接運行下載好的Node安裝包 源文件即可,目的路徑一般選擇如下:
D:/nodejs/
3
安裝完畢後,讀者可以到該目錄下瀏覽一下具體內容,這樣會對Node環境有一個大致的了解。
方法/步驟2
在Ubuntu(Linux)環境下需要運行apt命令進行安裝,具體方法如下:
sudo apt-get install nodejs
如果想獲取最新的Node安裝源,具體方法如下:
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
3
一般情況下,node命令會被自動安裝在以下路徑之中(視不同的Ubuntu系統版本而定):
/usr/local/bin/node
方法/步驟3
1
大致經過以上這幾步的操作,Node.js框架就安裝完畢了,為了檢驗Node環境是否正確,可以使用以下命令檢測Node的版本:
node -v
2
如果顯示出正確的版本號,則說明Node環境搭建成功了。
如果想要更好地學習nodejs,可以練練代碼段的相關圖書。
H. 2018TPC必火,全解析
TPC 誕生背景:
TPC的誕生區別於現有模式,一般模式是先開發區塊鏈應用並在區塊鏈中產生,用來在區塊鏈中作為記賬單位而存在。然後依據應用的發展再炒高的價值。
顯然,目前所有區塊鏈都是這樣的現狀。而目前在所有可以用互聯網技術服務的行業中基本處於飽和或壟斷狀態,所以目前區塊鏈技術在真實的應用當中比較難落地,因為目前區塊鏈整體行業處於萌芽狀態中,對很多事物仍然處於探索之中。所以目前形勢,區塊鏈應該是一個重商業運營的技術服務,而非重技術服務輕商業運營。
緬甸銀行業現狀與支付系統的可行性
緬甸目前13家外資銀行,本土銀行24家,2016年央行對所有銀行全部實現電算化,這對支付行業的外部環境是一個非常好的喜訊。緬甸6000萬人口,有3000+萬智能手機,卻沒有本土的APP,在這之前外部環境與第三方支付不在,所以基於互聯網的創業基本都失敗了。正是因為如此,第三方支付才能夠成為緬甸的新經濟基石。
緬甸3000+萬智能手機用戶,僅以仰光為例,每年600+億美金的消費額度,線上消費更是難以估量,未來5億的投放量,從0.14美金來看,如果線下市場佔有率為10%就有60億美金的流通,還未包含線上,其上漲空間甚至超過20倍。Grab在緬甸投資5億美金就是緬甸移動互聯網市場最好的寫照。當第三方支付用戶達到500萬用戶的時候,其資本估值將達到幾十億美金以上。
TPC
TPC基於以太坊智能合約,TPC就是以太坊的一條側鏈,同時也是主鏈,而後續的所有基於金融、理財、基金等等的開發與探索將都依託TPC進行,其後的所有開發將都是TPC的側鏈。TPC目前可以在imToken等以太坊錢包均可以進行收發,並預留未來開發介面:
其token完整版:
[ { "constant": true, "inputs": [], "name": "name", "outputs": [ { "name": "", "type": "string", "value": "TPC" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "name": "", "type": "uint256", "value": "10000000000000" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "name": "", "type": "uint8", "value": "4" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "name": "", "type": "uint256", "value": "0" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "name": "", "type": "address", "value": "" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "name": "", "type": "string", "value": "TPC" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" } ], "name": "frozenAccount", "outputs": [ { "name": "", "type": "bool", "value": false } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "target", "type": "address" }, { "name": "freeze", "type": "bool" } ], "name": "freezeAccount", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "name": "tokenName", "type": "string", "index": 0, "typeShort": "string", "bits": "", "displayName": "token Name", "template": "elements_input_string", "value": "TPC" }, { "name": "tokenSymbol", "type": "string", "index": 1, "typeShort": "string", "bits": "", "displayName": "token Symbol", "template": "elements_input_string", "value": "TPC" }, { "name": "decimalUnits", "type": "uint8", "index": 2, "typeShort": "uint", "bits": "8", "displayName": "decimal Units", "template": "elements_input_uint", "value": "4" }, { "name": "initialSupply", "type": "uint256", "index": 3, "typeShort": "uint", "bits": "256", "displayName": "initial Supply", "template": "elements_input_uint", "value": "10000000000000" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "target", "type": "address" }, { "indexed": false, "name": "frozen", "type": "bool" } ], "name": "FrozenFunds", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "from", "type": "address" }, { "indexed": true, "name": "to", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" } ]
完整內容會發布在GitHub中。
TPC選擇以太坊是因為以太坊是一個成熟的開發平台,在區塊鏈應用中可以節省大量時間,並為後續開發降低難度。獨自開發私有鏈需要大量技術人員進行迭代更新,其維護成本、應用成本、使用成本、時間成本、開發成本、價值成本不成比例,因為TPC是為商業模式而誕生。最大限度去挖掘商業價值。
TPC 的未來
緬甸銀行業的落後並不能阻擋TPC的布局,TPC將優先進駐銀行,商場,通過已有錢包進行收發。第三方支付平台已經進入最後調試階段,上線後再與之打通,成為必要的支付方式。TPC通過智能合約為銀行、保險、數據分析、基金、現貨、期貨等金融行業提供數據解決方案,並共享信用數據,同時作為獎勵為數據進行獎勵支出。因為本身TPC就是智能合約,通過其介面的開放可以為未來所有的金融產業做數據支持。而TPC的未來會成為理財產品,其覆蓋人群將會超過1500萬人,未來的價值空間將會呈現一個幾何式的增長。價格也會隨之而爆發。
TPC 總量
總量為10億,其中5億作為政府基金存在逐步釋放到市場進行流通,而後5億將逐步用於支付市場的流通。
TPC 商業價值
TPC最大的價值在於打通與第三方支付與理財應用的信用數據。通過嵌入在第三方支付體系當中可以使TPC進行用於線上、線下支付,打通最重要的流通環節,因為之所以有價格就是因為其價值,而其價值背後就是流通屬性。當有流通後就會產生買賣需求,所以才會有不同的價格走向。如果不能解決的流通性,那麼就是空氣幣,TPC的商業價值就在於用商業思維解決區塊鏈--應用的閉環模式。在TPC中,三者相對獨立而又結合。但公開、透明、安全。
這就好比比特幣一樣,比特幣之所以在2010年之前默默無聞不是因為沒人知道,做極客的那一小撮人很早就知道了比特幣的存在,但是他不具備流通屬性而一直不值錢,2010年那個程序員拿1000個比特幣換了一個披薩的新聞還不時被我們作為笑話,其實這就是背後流通性的不暢導致的。2011年絲綢之路的誕生2年時間150億美金的交易額全部來自比特幣,才讓比特幣成為了眾人皆知。可以說絲綢之路是讓沉睡的比特幣覺醒的一劑猛葯。
TPC 的商業生態
第三方支付 - 電商生態 - 游戲生態 - 社交生態
第三方支付相當於一個承接TPC的平台,因為緬甸目前沒有第三方支付,所以第三方支付在實際運作中會成為類似支付寶或者paypal的應用,那支付寶或paypal的價值因為第三方支付支付平台的誕生只是商業生態中的第一步,正是因為支付平台的誕生,TPC才可以進行流通。而第三方支付平台的出現才可以解決目前緬甸沒有電商、社交、游戲等等APP的局面,之前非常多的人都在緬甸建立電商、分類信息、游戲等平台,但是都倒閉了。其最重要的原因就是沒有第三方支付平台,第三方支付平台可成為緬甸線上、線下的一個新支付通道。當第三方支付平台的建立之後,所有其他公司的應用都會將其作為一種支付渠道接入,而TPC作為一種貨幣基金就會充分成為流通需求而出現。
TPC 為什麼依託以太坊而不是獨自開發
1.以太坊開發平台成熟,穩定
2.開發難度低,使用方便,面向人群更廣
TPC 運營團隊
丁林,CEO,緬籍華僑,主導投資Grandland以及一系列投資方案,累計投資超過7000萬美金。貌明,COO,緬籍華僑,原telenor緬甸高級經理,運營、執行能力強勢。負責整體運營與市場銷售。還有之前負責市場運營、市場調研員、文化分析員等大量優秀夥伴。
開發團隊由新加坡鄭憶安擔任主研,精通JAVA與nodejs,10年開發經驗,並且由來自中國、捷克的團隊一起進行技術探索。TPC研究室為其提供基礎支持。
TPC 分配方案
8%-----用於私募,早期投資者和對TPC前景看好的會員。
12%——ICO公募眾籌投資者,戰略投資夥伴。
10%——研究室基金,對技術的探索和未來應用落地
5%——-市場推廣,宣傳分發,戰略合作
15%——-商業落地部署,商業合作,市場開拓
50%——存放政府,根據市場逐步釋放
市場流通少,價值又可以落地實現。價格一定會幾何級增長
如果用一句話講 TPC
存在於第三方支付之中,未來覆蓋與使用人群會在千萬級以上,而現在能接近千萬級的只有比特幣,以太坊。
I. 如何為nodejs創建的賬號充入代幣
安裝Node.js,安裝文件和各平台具體安裝方法請見https://nodejs.org/zh-cn/download/。 由於我們後面使用的開發工具truffle以及本地測試區塊鏈ganache都是基於javascript 開發
安裝truffle,truffle正如其網站所宣傳的一樣,它是智能合約開發的瑞士軍刀。就像maven大大簡化的Java程序的編譯和部署,truffle也使得智能合約的開發和部署更加傻瓜化。(npm install -g truffle)
3. 安裝ganache. ganache是一個專門為開發智能合約定製的區塊鏈本地節點工具。大家可以從http://truffleframework.com/ganache/下載對應平台的安裝包並安裝。它和以太坊原本節點軟體(geth,parity)相比,具有以下優點,
安裝方便,省去繁瑣的配置,點擊幾下滑鼠便可完成。
省系統資源,他不會沒完沒了的挖礦,只是在有交易需要打包的時候才打包。
有圖形界面,從圖形界面可以方便和直觀的查看塊,交易,賬戶等信息。
4. 啟動ganache, ganache啟動後,界面如下: