Ⅰ 【ETH錢包開發04】web3j轉賬ERC-20 Token
在上一篇文章中講解了ETH轉賬,這一篇講一下ERC-20 Token轉賬。
【ETH錢包開發03】web3j轉賬ETH
1、直接用web3j的API
2、java/Android調用合約的 transfer 方法
不管用哪種方式來轉賬,你都需要先寫一個solidity智能合約文件來創建ERC-20 Token,然後部署合約,最後才是通過客戶端來調用。
注意:erc-20 token轉賬和eth轉賬的區別如下:
1、erc-20 token創建交易對象用的是這個方法 createTransaction
2、erc-20 token需要構建 Function ,它其實對應的就是erc-20 token合約中的那些方法。它的第一個參數就是ERC20中那幾個方法的名稱,第二個參數的話就是對應合約方法中的參數,第三個參數是和第二個參數對應的,按照我那樣就行了。轉賬的話就是 transfer ,我們從合約的 transfer 可以看到第一個參數是收款地址,第二個參數是金額,所以 Function 這里對應起來就好。
這種方法不需要使用web3j封裝的方法,而是直接調用solidity合約的方法。
步驟
1、web3j載入一個已經部署的合約
2、驗證合約是否載入成功 isValid
3、如何載入合約成功,則調用合約的 transfer 方法
注意:
1、這里的 TokenERC20 是根據solidity智能合約生成的對應的Java類,用於java/Android和智能合約交互的,如果你對這里不太清楚,不妨看看我之前的一篇文章。
以太坊Web3j命令行生成Java版本的智能合約
2、如果載入合約失敗,可能的一個原因是合約對應的Java類中的 BINARY 的值不對,這個值是你部署合約成功之後的bytecode,你最好檢查對比一下。
我發送一筆交易,可以通過這個地址查詢
https://rinkeby.etherscan.io/tx/
Ⅱ 為什麼大多數區塊鏈項目不使用java開發
區塊鏈項目對效率的要求比較高,所以大多數核心源碼的開發都是使用c/c++。但是如果是做都區塊鏈項目,除非要對源代碼進行大量的調整,否則也不見得就不選擇使用java。一般的dapp應用,使用java開發應該也是不錯的選擇。比如以太坊區塊鏈的話,針對java的有web3j的類庫,十分方便;比特幣的話有bitcoinj類庫,也很好用。還是要看還是什麼級別的應用,要做什麼,以及團隊的情況吧。
分享兩個java區塊鏈教程:
java比特幣詳解
java以太坊開發
Ⅲ 【ETH錢包開發02】導入錢包
本文主要講解通過助記詞、keystore、私鑰 3種方式來導入錢包。導入錢包就是說根據輸入的這3者中的一個去重新生成一個新的錢包。導入錢包的過程和創建的過程其實是差不多的。
根據助記詞導入錢包不需要原始密碼,密碼可以重新設置。根據用戶輸入的助記詞,先驗證助記詞的合規性(格式、個數等),驗證正確後,配合用戶輸入的密碼重新生成一個新的錢包。
驗證助記詞的合規性(格式、個數等)
助記詞導入錢包
通過私鑰導入錢包其實和創建錢包的過程基本一致。因為私鑰在導出的時候轉換成了16進制,所以在導入私鑰的時候,要把16進制轉換為byte數組。
keystore就是錢包文件,實際上就是錢包信息的json字元串。導入keystore是需要輸入密碼的,這個密碼是你最後導出keystore時的密碼。將keystore字元串變成walletFile實例再通過 Wallet.decrypt(password, walletFile); 解密,成功則可以導入,否則不能導入。
這是Web3j的API,程序走到這里經常OOM!
具體原因的話,我就不多說了,細節大家可以看這里
https://www.jianshu.com/p/41d4a38754a3
解決辦法
根據源碼修改 decrypt 方法,這里我用一個已經修改好的第三方庫
修改後的解密方法
導入Kestore
1、導入助記詞和私鑰是不需要以前的密碼的,而是重新輸入新的密碼;導入Keystore則需要以前的密碼,如果密碼不正確,會提示地址和私鑰不匹配。
2、關於備份助記詞
用過imtoken的同學可以看到imtoken是可以導出(備份)助記詞的。這個一開始我也很困惑,後來了解到其實它實在創建錢包的時候,在app本地保存了助記詞,導出只是講數據讀取出來而已。還有一點,imtoken一旦備份了助記詞之後,之後就沒有備份那個功能了,也就是說助記詞在本地存儲中刪除了;而且導入錢包的時候也是沒有備份助記詞這個功能的。
Ⅳ 【ETH錢包開發03】web3j轉賬ETH
在之前的文章中,講解了創建、導出、導入錢包。
【ETH錢包開發01】創建、導出錢包
【ETH錢包開發02】導入錢包
本文主要講解以太坊轉賬相關的一些知識。交易分為ETH轉賬和ERC-20 Token轉賬,本篇先講一下ETH轉賬。
1、解鎖賬戶發起交易。錢包keyStore文件保存在geth節點上,用戶發起交易需要解鎖賬戶,適用於中心化的交易所。
2、錢包文件離線簽名發起交易。錢包keyStore文件保存在本地,用戶使用密碼+keystore的方式做離線交易簽名來發起交易,適用於dapp,比如錢包。
本文主要講一下第二種方式,也就是錢包離線簽名轉賬的方式。
交易流程
1、通過keystore載入轉賬所需的憑證Credentials
2、創建一筆交易RawTransaction
3、使用Credentials對象對交易簽名
4、發起交易
注意以下幾點:
1、Credentials
這里,我是通過獲取私鑰的方式來載入 Credentials
還有另外一種方式,通過密碼+錢包文件keystore方式來載入 Credentials
2、nonce
nonce是指發起交易的賬戶下的交易筆數,每一個賬戶nonce都是從0開始,當nonce為0的交易處理完之後,才會處理nonce為1的交易,並依次加1的交易才會被處理。
可以通過 eth_gettransactioncount 獲取nonce
3、gasPrice和gasLimit
交易手續費由gasPrice 和gasLimit來決定,實際花費的交易手續費是 gasUsed * gasPrice 。所有這兩個值你可以自定義,也可以使用系統參數獲取當前兩個值
關於 gas ,你可以參考我之前的一篇文章。
以太坊(ETH)GAS詳解
gasPrice和gasLimit影響的是轉賬的速度,如果gas過低,礦工會最後才打包你的交易。在app中,通常給定一個默認值,並且允許用戶自己選擇手續費。
如果不需要自定義的話,還有一種方式來獲取。獲取以太坊網路最新一筆交易的 gasPrice ,轉賬的話, gasLimit 一般設置為21000就可以了。
Web3j還提供另外一種簡單的方式來轉賬以太幣,這種方式的好處是不需要管理nonce,不需要設置gasPrice和gasLimit,會自動獲取最新一筆交易的gasPrice,gasLimit 為21000(轉賬一般設置成這個值就夠用了)。
這個問題,我想是很多朋友所關心的吧。但是到目前為止,我還沒有看到有講解這方面的博客。
之前問過一些朋友,他們說可以通過區塊號、區塊哈希來判斷,也可以通過Receipt日誌來判斷。但是經過我的一番嘗試,只有 BlockHash 是可行的,在web3j中根據 blocknumber 和 transactionReceipt 都會報空指針異常。
原因大致是這樣的:在發起一筆交易之後,會返回 txHash ,然後我們可以根據這個 txHash 去查詢這筆交易相關的信息。但是剛發起交易的時候,由於手續費問題或者乙太網絡擁堵問題,會導致你的這筆交易還沒有被礦工打包進區塊,因此一開始是查不到的,通常需要幾十秒甚至更長的時間才能獲取到結果。我目前的解決方案是輪詢的去刷 BlockHash ,一開始的時候 BlockHash 的值為0x00000000000,等到打包成功的時候就不再是0了。
這里我使用的是rxjava的方式去輪詢刷的,5s刷新一次。
正常情況下,幾十秒內就可以獲取到區塊信息了。
區塊確認數=當前區塊高度-交易被打包時的區塊高度。
Ⅳ 使用Web3J與第三方合約交互——批量轉賬
之前使用NodeJs與智能合約交互,都是訪問的自己部署的合約。最近要對線上第三方合約進行轉賬操作,人數比較多,一筆筆操作起來手指都點斷了還容易出錯。既然代幣Token都遵守ERC20協議,肯定有統一的Transfer(轉賬)方法供客戶端調用,那麼編寫程序實現自動轉賬應該可以實現,去查了相關資料發現web3j是不錯的選擇。
輕量級客戶端與以太坊交互的Java庫。
既然是調用第三方合約那麼肯定需要知道合約地址,合約地址定義了到哪裡去訪問合約;
ABI(Application Binary Interface): 應用程序二進制介面,定義了智能合約提供的方法功能
若是無法獲取到ABI介面,也可以使用solc編譯生產bin和abi文件。
(生產代理類時可以指定包路徑和類名)
這樣一來,便可以使用程序完成批量轉賬操作。
後來研究發現,使用NodeJs直接調用Web3也可以實現對應功能,不過還是對Java更熟悉一些,就採用了Java的方式。
Ⅵ 怎麼在區塊鏈上搶眾籌
php網站怎麼接入區塊鏈眾籌
php網站怎麼接入區塊鏈眾籌,基於區塊鏈的眾籌平台及方法與流程
風雪軒
轉載
關注
0點贊·332人閱讀
本發明屬於眾籌領域,特別是涉及一種基於區塊鏈的眾籌平台及方法。
背景技術:
目前市面上出現了水滴籌、輕松籌和無憂籌等一系列的大病籌款系統,患者可以在這些大病籌款系統上進行籌款。這些大病籌款系統號稱不收任何手續費,但是很多人無法相信這點,畢竟任何企業都是要盈利的,沒有哪家敢公布匯款記錄,存在著暗箱操作的可能,在公信力方面有很大欠缺。
技術實現要素:
本發明的目的在於克服現有技術的不足,提供一種基於區塊鏈的眾籌平台及方法,利用區塊鏈記錄每一筆籌款的交易記錄,任何人均可查詢交易記錄,解決捐款人的顧慮。
本發明的目的是通過以下技術方案來實現的:基於區塊鏈的眾籌平台,包括:
患者模塊,用於患者方在眾籌平台上發布眾籌信息;
審核模塊,用於對所述患者方發布的眾籌信息進行審核;
推廣模塊,用於將審核通過的眾籌信息進行發布和推廣;
捐款模塊,用於捐款人採用數字貨幣向患者方的眾籌賬戶進行捐款;
區塊鏈模塊,用於記錄眾籌過程中的數據信息;
處理模塊,用於在區塊鏈模塊中為眾籌信息通過審核的患者方建立一個眾籌賬戶,並在籌款截止後根據當前幣種匯率將所述眾籌賬戶中的資金兌換成現金流匯到患者方的銀行賬戶;以及用於將患者方的眾籌信息、捐款人的捐款信息和向患者方的銀行賬戶匯款的匯款信息記錄在區塊鏈模塊中;
查詢模塊,用於查詢人查看眾籌信息、捐款信息和匯款信息。
優選的,所述基於區塊鏈的眾籌平台還包括:
舉報模塊,用於舉報人對患者方發布的眾籌信息進行舉報;
核實模塊,用於對舉報人的舉報信息進行核實。
優選的,所述患者模塊包括:
注冊子模塊,用於患者方注冊平台賬號;
登錄子模塊,用於患者方登錄所述平台賬號;
信息發布子模塊,用於患者方在登錄所述平台賬號後發布眾籌信息。
基於區塊鏈的眾籌方法,包括:
患者方在眾籌平台上發布眾籌信息;
眾籌平台對所述患者方發布的眾籌信息進行審核,若審核通過則在區塊鏈模塊上為所述患者方建立一個眾籌賬戶,並將所述患者方的眾籌信息記錄在區塊鏈模塊上;
將審核通過的眾籌信息進行發布和推廣;
捐款人採用數字貨幣向所述患者方的眾籌賬戶進行捐款,眾籌平台將捐款人的捐款信息記錄在區塊鏈模塊上;
在患者方籌款截止後,眾籌平台根據當前的幣種匯率將所述患者方的眾籌賬戶中的資金兌換成現金流,並將所述現金流匯到患者方的銀行賬戶中。
優選的,所述基於區塊鏈的眾籌方法還包括:
查詢人員通過眾籌平台查看患者方的眾籌信息、捐款人的捐款信息以及眾籌平台向患者方的銀行賬戶進行匯款的匯款信息。
優選的,所述基於區塊鏈的眾籌方法還包括:
舉報人員對患者方發布的眾籌信息進行舉報;
眾籌平台根據舉報人員的舉報信息對患者方發布的眾籌信息進行核實,若舉報屬實,則撤銷所述眾籌信息,並將該患者方的眾籌賬戶中的捐款退還相應的捐款人。
優選的,將審核通過的眾籌信息進行推廣的方式包括app推廣、小程序推廣和朋友圈推廣中的一種或多種。
優選的,基於區塊鏈的眾籌方法還包括:若捐款人無數字貨幣,則在眾籌平台上為捐款人進行開戶操作,然後根據當前的匯率將資金轉換為相應的數字貨幣。
本發明的有益效果是:
(1)本發明中,籌款數據全部記錄在區塊鏈中,由於區塊鏈數據不可篡改的特性,使得籌款數據公開透明,用戶可以方便地查看眾籌的每一筆交易記錄,使得所有捐款明細公開透明,有利於消除捐款人以及患者方對於暗箱操作的顧慮;
(2)本發明的方案中,接受數字貨幣的捐款,從而讓數字貨幣參與公益服務中。
附圖說明
圖1為基於區塊鏈的眾籌平台的組成示意圖;
圖2為基於區塊鏈的眾籌方法的流程示意圖。
具體實施方式
下面將結合實施例,對本發明的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域技術人員在沒有付出創造性勞動的前提下所獲得的所有其他實施例,都屬於本發明保護的范圍。
參閱圖1-2,本發明提供一種基於區塊鏈的眾籌平台及方法:
如圖1所示,基於區塊鏈的眾籌平台,包括患者模塊、審核模塊、推廣模塊、捐款模塊、處理模塊、查詢模塊、區塊鏈模塊、舉報模塊和核實模塊等。
所述患者模塊包括注冊子模塊、登錄子模塊和信息發布子模塊。注冊子模塊用於患者方注冊平台賬號,注冊時患者方設置相應的賬戶名以及登錄密碼,在整個籌款平台中一個賬戶名只能被用一次,即不能存在相同的兩個賬戶名。登錄子模塊用於患者方登錄所述平台賬號,患者方根據賬戶名和登錄密碼登錄相應的平台賬號,眾籌平台驗證賬戶名和登錄密碼是否匹配,若匹配則成功登錄相應的平台賬號,否則提示登錄失敗。信息發布子模塊用於患者方在登錄所述平台賬號後發布眾籌信息,眾籌信息包括患者方的真實個人信息、籌款原因及證明材料、籌款金額、籌款時間等。
所述審核模塊用於對所述患者方發布的眾籌信息進行審核,若眾籌信息中存在資料不全、資料有誤或者資料造假等問題,則將眾籌信息直接駁回。
所述推廣模塊用於將審核通過的眾籌信息進行發布和推廣,將審核通過的眾籌信息進行推廣的方式包括app推廣、小程序推廣和朋友圈推廣中的一種或多種。
所述捐款模塊用於捐款人向患者方的眾籌賬戶進行捐款。
所述處理模塊包括眾籌賬戶創建子模塊、資金處理子模塊和信息記錄子模塊等。眾籌賬戶創建子模塊用於在區塊鏈模塊中為眾籌信息通過審核的患者方建立一個眾籌賬戶。資金處理子模塊用於在籌款截止後根據當前幣種匯率將所述眾籌賬戶中的資金兌換成現金流,然後將所述現金流匯到患者方的銀行賬戶。信息記錄子模塊用於將患者方的眾籌信息、捐款人的捐款信息和向患者方的銀行賬戶匯款的匯款信息記錄在區塊鏈模塊中。
所述查詢模塊用於查詢人查看所述眾籌信息、捐款信息和匯款信息。
所述區塊鏈模塊用於記錄眾籌信息、捐款信息和匯款信息,以及建立眾籌賬戶。區塊鏈模塊記錄信息的過程為:創建交易(tx);將交易(tx)通過p2p網路進行廣播;對交易(tx)進行驗證;將交易(tx)的驗證結果通過p2p網路進行廣播;將交易(tx)寫入賬本。
所述舉報模塊用於舉報人對患者方發布的眾籌信息進行舉報。
所述核實模塊用於對舉報人的舉報信息進行核實,若舉報屬實,則撤銷所述眾籌信息,並將該患者方的眾籌賬戶中的捐款退還相應的捐款人。
所述基於區塊鏈的眾籌平台還包括開戶模塊,用於提供數字貨幣開戶功能,捐款人若無數字貨幣,則可以在眾籌平台上為捐款人進行開戶操作,然後根據當前的匯率將資金轉換為相應的數字貨幣。
如圖2所示,基於區塊鏈的眾籌方法,包括:
s1.患者方在眾籌平台上發布眾籌信息。
在步驟s1之前還包括:患者方在眾籌平台上注冊平台賬號,患者方登錄所述平台賬戶。
s2.眾籌平台對所述患者方發布的眾籌信息進行審核,若審核通過則在區塊鏈模塊上為所述患者方建立一個眾籌賬戶,並將所述患者方的眾籌信息記錄在區塊鏈模塊上。
s3.將審核通過的眾籌信息進行發布和推廣。將審核通過的眾籌信息進行推廣的方式包括app推廣、小程序推廣和朋友圈推廣中的一種或多種。
s4.捐款人採用數字貨幣向所述患者方的眾籌賬戶進行捐款,眾籌平台將捐款人的捐款信息記錄在區塊鏈模塊上。捐款人根據眾籌平台提供的(眾籌信息中)患者方的賬戶地址進行轉賬,轉賬時可以添加備注信息;轉賬時僅須提供患者方的賬戶地址,且轉賬出錯不能撤回。
s5.在患者方籌款截止後,眾籌平台根據當前的幣種匯率將所述患者方的眾籌賬戶中的資金兌換成現金流,並將所述現金流匯到患者方的銀行賬戶中。
本實施例中,將眾籌信息、捐款信息和匯款信息等記錄在區塊鏈模塊中,利用利用區塊鏈數據不可篡改的特性,避免相關信息被篡改,保證了相關記錄信息的真實性。
所述基於區塊鏈的眾籌方法還包括:
查詢人員通過眾籌平台查看患者方的眾籌信息、捐款人的捐款信息以及眾籌平台向患者方的銀行賬戶進行匯款的匯款信息。
任何人都可以通過查詢模塊方便地查看眾籌信息、捐款信息和匯款信息等記錄,做到相關信息的可追蹤、可溯源,使得籌款數據公開透明,有利於消除捐款人以及患者方對於暗箱操作的顧慮。
所述基於區塊鏈的眾籌方法還包括:舉報人員對患者方發布的眾籌信息進行舉報;眾籌平台根據舉報人員的舉報信息對患者方發布的眾籌信息進行核實,若舉報屬實,則撤銷所述眾籌信息,並將該患者方的眾籌賬戶中的捐款退還相應的捐款人。
基於區塊鏈的眾籌方法還包括:若捐款人無數字貨幣,則可以在眾籌平台上為捐款人進行開戶操作(即為捐款人形成一個區塊鏈錢包),然後根據當前的匯率將資金轉換為相應的數字貨幣。
以上所述僅是本發明的優選實施方式,應當理解本發明並非局限於本文所披露的形式,不應看作是對其他實施例的排除,而可用於各種其他組合、修改和環境,並能夠在本文所述構想范圍內,通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本發明的精神和范圍,則都應在本發明所附權利要求的保護范圍內。
php網站怎麼接入區塊鏈眾籌
想買保時捷Cayenne?試駕來周口,首付低至20%
精選推薦
廣告
Thinkphp螞蟻大未來新版區塊鏈系統源碼.zip
24下載·0評論
2020年1月8日
區塊鏈眾籌的創想N次方
135閱讀·0評論·0點贊
2018年4月17日
區塊鏈眾籌的優勢
753閱讀·1評論·0點贊
2018年5月24日
突破眾籌困境「入主」區塊鏈——先行者的力量
2083閱讀·0評論·0點贊
2018年8月17日
眾籌空間(區塊鏈技術探索)
942閱讀·3評論·0點贊
2018年5月29日
【WEB3】如何使用Web3J庫開發應用連接到以太坊區塊鏈網路
2087閱讀·0評論·0點贊
2022年8月17日
帝國時代手游下載
精選推薦
廣告
基於區塊鏈技術的眾籌平台-畢業設計
769閱讀·0評論·0點贊
2020年5月22日
詳解區塊鏈技術,如何運作
3465閱讀·0評論·1點贊
2022年7月6日
基於區塊鏈技術的眾籌平台
25下載·0評論
2018年12月18日
帶你玩轉區塊鏈--實現Dapp眾籌項目-第二章-第二節【以太坊篇】
1336閱讀·2評論·2點贊
2020年2月21日
51行代碼實現簡單的PHP區塊鏈
109閱讀·0評論·0點贊
2021年2月20日
php使用區塊鏈_PHP實現區塊鏈
1217閱讀·0評論·0點贊
2021年3月22日
區塊鏈入門教程——什麼是區塊鏈?
1074閱讀·1評論·0點贊
2018年3月1日
區塊鏈眾籌騙局
1612閱讀·0評論·0點贊
2018年11月25日
怎麼樣加入區塊鏈?個人如何進入區塊鏈?
1.4W閱讀·0評論·0點贊
2018年6月25日
如何讓區塊鏈連接外面的世界
9775閱讀·1評論·2點贊
2016年12月20日
如何全面控制區塊鏈上數據的「讀」許可權
1507閱讀·0評論·0點贊
2021年10月27日
要不要接入區塊鏈,新手看這一篇就夠了
497閱讀·0評論·0點贊
2018年9月25日
去首頁
看看更多熱門內容
Ⅶ 06-web3j的ABI
ABI是一種數據編碼方案用於處理Ethereum智能合約。ABI中定義的類型和solidity是一樣的。比如uint8…,uint256,int8,…,int256,bool,string,等等。
web3j的ABI模塊提供了所有ABI規范支持,包括:
web3j提供的本地java類型與ABI轉換如下:
請參閱各種編碼/解碼的 ABI單元測試 的例子。
一個完整的ABI規范在 Solidity documentation 。
這是一個非常輕量級的模塊,只依賴於 Bouncy Castle 第三方庫用來加密hash( Spongy Castle 在Android上)。其他希望與Ethereum ABI交互(JVM或Android)的項目會選擇使用這個模塊而不是編寫自己的實現。
Ⅷ ETH轉賬的2種方式的對比
web3j支持使用以太坊錢包文件(推薦)和乙太網客戶端管理命令來發起一筆交易。當你創建了一個擁有以太幣的賬戶後,你可以通過以下兩種交易機制,和以太坊網路(私網/公網)交易:
這里主要講一下 線下簽名交易(Offline transaction signing) 。線下簽名交易允許你使用web3j提供的錢包賬戶發起交易,你完全控制自己的私鑰,交易發送到網路上的其它節點並廣播。
線下簽名交易使用 RawTransaction 對象來完成,一共有如下幾步:
1、通過私鑰或密碼+錢包文件(keystore)來載入轉賬憑證Credentials
2、獲取發起轉賬賬戶的nonce 值,也就是第幾筆交易
3、創建 RawTransaction交易 對象
4、簽名 RawTransaction 對象,也就是對交易做簽名
5、發送交易( RawTransaction 對象)給節點處理。
6、獲取交易哈希值TxHash
以太坊實戰-再談nonce使用陷阱: https://blog.csdn.net/wo541075754/article/details/79054937
此外,還有一種簡單的轉賬方式
這種方式,不需要自己管理nonce。
這2種方式都是離線交易,先組裝交易,然後發送到鏈上。
參考:
https://docs.web3j.io/getting_started.html#transactions
https://www.jianshu.com/p/6650d2a3aea9