㈠ 以太坊中的計量單位及相互轉換
首先我們來看一下以太幣單位之間的轉換,以太幣的最小單位為wei,1個eth相當於10的18次方wei。通常,大家也使用Gwei作為展示單位。比較常用的就是eth,Gwei和wei。
為了使用和驗證web3的操作命令,我們先進入geth的console控制台,在這里對具體的單位或進制轉換進行詳細的實例演示。
此轉換方法為web3.toDecimal(hexString)。直接在控制台輸入一下命令進行使用此函數進行轉換。
通過此函數將十六進制的0x16轉換為十進制的22。
轉換函數:web3.fromDecimal(number)。
控制台命令及結果如下:
把給定數字或十六進制字元串轉為 BigNumber 類型的實例。
此處轉換需要注意的是BigNumber只會保留小數點後20位,超過20位的部分將會被截取掉。
上面表格中列出了以太幣之間的單位進制,同樣可以使用web3進行相應的轉換,基本函數為web3.fromWei和web3.toWei(number, unit)。
具體實例如下:
其他的相關轉換大家可自行嘗試,下面列出相應的轉換種類:
通過上面的函數,在交易的過程中我們就可以隨意的單位進行發送交易,而不必使用最小單位wei。
通過查詢余額的方法,我們也可以看出區塊鏈中存儲這些數據的單位為wei。
代幣中的單位
在編寫ERC-20的代幣合約時我們可以指定代幣的單位,比如:
這里就指定了代幣單位精確到小數點後幾位。比如精確到小數點後3位,那麼1個代幣存儲時就是1000個最小單位的值。
㈡ 【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刷新一次。
正常情況下,幾十秒內就可以獲取到區塊信息了。
區塊確認數=當前區塊高度-交易被打包時的區塊高度。
㈢ imtoken錢包轉賬失敗怎麼回事
imtoken錢包轉賬失敗怎麼回事,相信很多人在使用imtoken錢包的時候經常的會碰到轉賬失敗的情況,不少人不知道這個情況是怎麼引起的,下面跟著小編一起來看看吧。
imtoken錢包轉賬失敗怎麼回事
Outofgas(Gas不足)
打個通俗易懂的比喻吧,就像你開車必須要有汽油一樣,你在以太坊上轉賬也需要有Gas。開車≈轉賬,汽油≈Gas。如果你要從A地驅車前往B地,按照實時的交通情況,你需要消耗200升汽油。但你為這次行程只准備了150升汽油,那是派攔否能到達B地呢?在現實生活中,大家肯定都知道,你一定是到不了的。同時雖然你沒到達B地,但是你的汽油卻已經消耗了。
那麼回到區塊鏈的世界,也是同樣的道理。如果你要進行一筆轉賬,就要為這筆轉賬設置一個Gas。如果你設置的過低,就會出現「汽車」沒到達目的地就沒「油」的情況,即交易失敗。失敗原因就是outofgas(汽油不足)。同時,又因為礦工們已經進行了打絕羨首包的操作,但在打包過程中發現Gas不足,導致這筆交易打包失敗了。礦工費仍然會被扣除,但這些礦工費都是由礦工們收取的,imToken並不收你一分錢。
BadInstruction(指令錯誤)
Badinstruction字面意思是「指令錯誤」。出現這種提示的原因,大概率是因為智能合約的代碼本身就存在邏輯問題,從而導致合約在執行的過程中,出現「指令錯誤」。這就像一台壞了的機器,你輸入一個指令,機器是不能正常運作的。這時候,我們該找誰解決呢?當然是智能合約的創建方,去修復這台「壞了的機器」。另外轉賬的礦工費仍然會被礦工收走。
Reverted(回退)
以太坊上包含兩類賬戶,普通賬戶和合約賬戶。普通賬戶是由用戶通過私鑰控制,而合約賬戶是由部署在以太坊上的智能合約控制。
那麼,reverted是什麼情況呢?reverted其實是一個函數,用於立即中止合約的執行,並且把狀態回滾。雖然是智能合約,比一般的合約更「聰明」,但是有些合約在執行的過程中還是會「犯錯」的。
這聽起來是不是過於抽象,讓我們打個簡單的比方。出現reverted的一種可能情況:你的合約規定,當你輸入一塊錢,你可以得到一杯喜茶並數。但是這個合約並沒有檢查庫存里是否有足夠的喜茶。當店裡沒有喜茶庫存的時候,後面來的人,即使它輸入一塊錢,也不能得到喜茶。這時候,你原本的函數-即輸入一塊錢就會得到一杯喜茶的函數就會失敗,它會發出錯誤的信息並回滾到當前的交易狀態。
看到這里,想必大家也已經明白了,出現badinstruction和reverted,都是因為智能合約的問題,所以建議大家直接去找合約的創建者,也就是項目方。
㈣ 以太坊入門(三)用web3j進行以太轉賬及代幣轉賬
上章講到賬戶的查詢,本章講述賬戶轉賬。
代幣轉賬和以太轉賬的區別在於,to地址是合約地址,而input是有三部分數據構成:transfer方法的哈希+收款人的地址+轉賬金額。此處比較難理解的正是Function部分,設置好參數以後,調用rawTransaction就可以了。
㈤ 以太坊錢包轉賬實戰記錄
最近項目中,要求給客戶退款。 雖然之前我們寫的服務封裝了以太坊錢包轉賬的諸多細節,可以很方便的轉賬,但考慮再三,覺得最安全的方式還是用錢包本身的命令來轉賬。話不多說,這里記錄下用以太坊錢包轉賬的步驟:
1. 首先網路搜索了下,網上此類的文章還不少。看了一圈後,覺得最好的還是這篇: https://blog.csdn.net/DDFFR/article/details/53673650 geth賬戶管理轉賬。
2.開始打開自己的以太坊錢包。查看錢包各個賬戶的余額。命令:eth.getBalance('0xaddress')
3. 開始轉賬步驟:
3.1) 解鎖賬戶。命令:personal.unlockAccount("0xaddress123456789",「123456」)。 第一個參數:賬戶,第二個參數:解鎖密碼。就是創建這個賬戶地址時的密碼。 其實還有第三個參數,是時間,表示解鎖多久。如60,就寫0x3c。可以不寫,默認是300秒,就是5分鍾;
3.2)計算fee:因為想把賬戶里的錢都退回去,所以要計算一個合理的fee,fee的計算公式:
fee <= gasPrice * gasLimit,對於普通的ETH交易,則gasLimit=21000即可,這個值可看區塊瀏覽器的交易,一般都是這個值。而gasPrice則需要自己確定,這個是浮動的。獲取方式:通過錢包的:
eth.gasPrice 來獲取錢包本身推薦的礦工費。也可自己給一個值。但記住,給太低就沒人打包了;
而對於gasLimit,錢包的值各不相同。如果不在乎手續費的話,可以用後面提到了的轉賬命令,給自己的賬戶發送一個0eth的轉賬,來獲取本錢包的gaslimit參數。
3.3)計算實際款額度:
amout = 賬戶的余額-fee
3.4)轉賬命令:
有幾個方式:
gasprice/gaslimit由錢包本身指定: eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', value: web3.toWei(1, "ether")})
eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', value: web3.toWei(0, "ether")})//通過這個可以獲取錢包本身提供的 gasLimit默認參數。
自己指定gasprice/gaslimit:eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', gasPrice: web3.toWei(30, 'gwei'), gas:21000, value: web3.toWei(1, "ether")})
這里用到了web3.toWei()函數,這個函數表示將第一個數字參數變成最小以太坊單位Wei表示的一個數字。第二個參數表示這個參數的單位。可以是1Gwei = 10^9 Wei,1 ether=10^18 Wei.
如果出現錯誤,根據提示修改參數。如果成功,則返回一個交易id。根據這個id到瀏覽器上查看交易狀態即可。
上面步驟要在解鎖時間范圍內完成,要不就提示賬戶被鎖定的信息。感覺以太坊這點做得還是挺好,挺安全的。
在做上面步驟時,這里還遇到了一個坑,就是有個服務會掃描錢包賬戶,進行資金歸集。對此,為了操作不被打斷。必須先停止對這個錢包操作的所有服務,否則會中斷轉賬流程,引起不必要的安全隱患。所以切記:轉賬前,保證只有你自己在操作錢包;轉賬前,保證只有你自己在操作錢包;轉賬前,保證只有你自己在操作錢包;
㈥ 為什麼以太坊轉賬會退回部分
以太坊區塊鏈中,當一筆交易經由某個節點或錢包產生時,這筆交易需要被傳送給其它節點來作驗證。做法是將交易資料經由數位簽章加密並經由Hash函數得出一串代表此交易的唯一Hash值後,再將這個Hash值廣播(Broadcast)給以太坊區塊鏈網路中的其它參與節點進行驗證。而這些信息存儲在一個有一定儲值區塊中,當佔用內存過多時,多餘的轉賬會被原路返回,此時用戶需再進行一次操作,將其轉入下一個區塊中給予驗證。最近以太坊鏈上類似錯誤出現得比較頻繁,如前幾天出現多次轉賬額與手續費顛倒,轉賬0.5eth竟扣掉1萬多個eth的手續費。
㈦ 以太坊智能合約開發:讓合約接受轉賬
在以太坊智能合約開發中,通常會有向合約地址進行轉賬的需求,那麼有幾種向合約地址進行轉賬的方式呢?
有三種方式:
部署合約時轉賬
調用合約提供的方法
直接向合約地址進行轉賬
但有一個問題,以太坊的智能合約默認是拒絕來自任何地址的轉賬,那麼如何讓合約能夠支持接收轉賬呢?
1、部署轉賬
在進行合約開發時,如果想要在部署時,直接向該合約進行轉賬,只需要給構造函數中添加payable修飾符。
示例:
2、執行合約轉賬
執行合約轉賬,則需要給你需要支持轉賬功能的方法添加payable修飾符
示例:
3、直接轉賬
支持直接轉賬,需要藉助後備函數(fallback function),只需要為後備函數添加 payable 修飾符
示例:
㈧ 以太坊轉賬流程
發起:用戶在本地的以太坊錢包軟體中選擇要發送的交易地址(From)、輸入目標地址(To)、金額(Value)、是否部署或調用合(Data)、手續費單價(Gasprice)等,確認發送至以太坊節點節點和錢包可以是同一台
廣播:節點收到(或自己發起)交易後,會對交易進行驗證。驗證:交易的簽名、發起賬號的余額是否能支付轉賬余額與手續費、Nonce是否為賬號已發出的交易數。驗證為合法後,將交易加入節點的交易池中交易池中存儲著待打包的交
安裝以太坊瀏覽器錢包插件,創建錢包,獲取虛擬以太幣,進行轉賬交易。 實驗內容 學習 初識以太坊,發送交易 1.學習《初始以太坊,發送交易》,虛擬以太幣交易。
㈨ 以太坊的智能合約
智能合約是運行在計算機裡面的,用於保證讓參與方執行承諾的代碼,般情況下,普通合約上記錄了甲方與乙方各方面的關系條款,並通常是通過法律強制執行或保護的,而「智能合約」則是用密碼或密鑰來執行關系。以更加直接的角度來理解的話,即「智能合約」的程序內容將同-開始大家一起設定好的那樣百分百執行,並且零差錯。
舉個例子,以太坊用戶可以使用智能合約在特定日期向朋友發送10個以太幣。在這種情況下,用戶可以操作創建一個合約,然後將程序推人該合約中進行特殊計算,以便它能夠執行所需的命令。而以太坊就是專門把精力集中在這件事上的這么一個平台。
比特幣是第一個支持「智能契約」的資源幣種,因為網路的價值在於把價值或數據從一個點或人轉移到另一個點或人身上。節點網路只在滿足某些條件時才會進行驗證,但是,比特幣僅限於貨幣用例。相反,以大坊取代了比特幣那種帶有不小限制性的編程語言,取而代之的是一種允許開發人員編寫自己程序的語言。以太坊允許開發人員編寫他們自己的「智能契約」,即「自主代理」或「自治代理」,正如ETH白皮書所稱的那樣。該編程語言是「圖靈完備」語言,這意味著它支持一組更廣泛的計算指令。智能合約能做些什麼呢?
1.「多簽名」賬戶功能,只有在一定比例的人同意時才能使用資金。這個功能經常用在與眾籌或募捐類似的活動中。
2.管理用戶之間所簽訂的協議。例如,一方從另一方購買保險服務3.為其他合同提供實用程序。
4.存儲有關應用程序的信息,如「域注冊信息」或「會員信息記錄」。概念有時候比較晦澀,我們舉一個募捐的智能合約的例子來幫助理解:假設我們想向全網用戶發起募捐,那就可以先定義一個智能賬戶,它有三個狀態:當前募捐總量,捐款目標和被捐贈人的地址,然後給它定義兩個函數:接收募捐函數和捐款函數。
接收募捐函數每次收到發過來的轉賬請求,先核對下發送者是否有足夠多的錢(EVM會提供發送請求者的地址,程序可以通過地址獲取到該人當前的區塊鏈財務狀況),然後每次募捐麗數調用時,都會比較下當前募捐總量跟捐款目標的比較,如果超過目標,就把當前收到的捐款全部發送到指定的被捐款人地址,否則的話,就只更新當前募捐總量狀態值。
捐款函數將所有捐款發送到保存的被捐贈人地址,並且將當前捐款總量清零。每一個想要募捐的人,用自己的ETH地址向該智能賬戶發起一筆轉賬,並且指明了要調用接受其募捐函數。於是我們就有一個募捐智能合約了,人們可以往裡面捐款,達到限額後錢會自動發送到指定賬戶,全世界的礦工都在為這個合約進行計算和擔保,不再需要人去盯著看有沒有被挪用,這就是智能合約的魅力所在。
㈩ 以太坊怎麼0曠工費轉賬
以太坊0礦工費轉賬,可以通過點擊礦工費進行設置。最新版本的2.5.7imToken錢包支持三檔礦工費,即「快、中、慢」。我們按照需要交易被確認打包的時間進行選擇即可,不會出現手滑設置成天價礦工費的情況。
一、以太坊是什麼?
本質上,以太坊是一個共享資料庫,其中可以存儲數據或信息,數據和信息不可偽造、可追溯、開放透明,這使得該技術奠定了堅實的信任基礎,打造了可靠的協作機制,具有非常廣闊的前景。如今,區塊鏈已經進入公眾的視野,成為社會關注的焦點。簡單來說,以太坊是一個開發平台,它允許我們編寫像區塊鏈技術這樣的應用程序。以太坊封裝了底層的區塊鏈技術,允許開發人員直接開發,只專注於應用程序本身的開發,大大降低了難度。
二、以太坊貿易平台是怎麼做搬磚套利的
如下所示:1. 以太坊是一個基於智能合約和分布式互聯網創作應用的平台,可以對比特幣和以太坊的任何支付進行編程。一旦發現差價,就會從價格低的平台購買比特幣和以太坊,然後轉移到價格高的平台出售,從而從差價中賺取利潤;2.使用大規模高端雲計算,在全球貨幣交易平台上會做空或做多(低吸高拋),在0.28。只要數字貨幣存在,價格波動,價差空間就會一直存在。Ethtrade以太坊交易平台可以說開創了數字貨幣的新投資模式。3.Ethtrade以太坊有一套完整的交易策略,包括差價、幣對幣轉換、市場預測和假幣,這些都是普通人做不到的。
綜上所述,以太坊是一個非常厲害的開發平台,它可以利用差價來進行售出,從而賺取利潤,並且它的計算一般都是採用大型的高端雲,在世界上都是非常厲害的,可以確保每個投資者都能分紅增值。