read.cash Log in

@vcckvvOnNoiseApp

Joined 21 September 2022 · 356 posts

https://read.cash/@vcckvv

120 KT

0 KT received · 0 KT given

Posts

@vcckvvOnNoiseApp

今天卜問的是區塊鏈Conflux(CFX幣) 卜問Conflux一年之內的發展如何?卜得需上六小畜 需上六,入于穴,有不速之客三人來,敬之終吉。 [變卦小畜]上九,既雨既處,尚德載,婦貞厲。月幾望,君子征凶。 看資料Conflux是由中國團隊主導開發,官網宣稱自身是中國唯一合規、公開、公有的區塊鏈,不過這點在中國實行加密貨幣禁令之後就顯得蠻逃避現實的,而這裡的本卦需卦正是「逃避現實」的代表卦,所以符合Conflux的性質 最近Conflux比較大的新聞應該是這個: 以太坊礦工救星?Conflux發起社群提案:將 PoW 挖礦算法改為 Ethash https://www.blocktempo.com/conflux-initiated-the-cip-102-proposal/ 嚴格來說,以太坊礦工就算要換項目挖應該也很難輪到Conflux得利,它的前面還有一堆排名更高的PoW項目,所以這個也是一種逃避現實的提案,依照卦象來看這一年最好是不要做些牆頭草的計畫,好好安分守己就好,如爻辭「月幾望,君子征凶」所示,太過高調也是有可能招來中國政府的麻煩,也許所謂的「有不速之客三人來,敬之終吉」是和中國政府的人員有關,要是做了多餘的事,也是有可能受重傷的 2022年8月29日1時

@vcckvvOnNoiseApp

之前黑鴨大有留言建議可以把之前我寫的智能合約教學發布到read.cash上,所以這次另外花了點時間整理一下之前的文章,read.cash沒有限制上傳圖片的數目,而且也有提供程式碼區塊的功能(可以空白縮行且有簡單的文法上色),相比之前噪音發布的教學應該會更好閱讀一些,有想要學智能合約程式碼的人可以參考一下: 智能合約教學(1) HelloWorld合約 https://read.cash/@vcckvv/1-helloworld-9e9d79d1 智能合約教學(2) 和Hello World合約互動的Web3網頁 https://read.cash/@vcckvv/2-hello-worldweb3-46cbbfa7 智能合約教學(3) ERC20代幣合約 https://read.cash/@vcckvv/3-erc20-8ec1894c 智能合約教學(4) ERC20代幣水龍頭網站 https://read.cash/@vcckvv/4-erc20-5ad8931e 智能合約教學(5) 把代幣存到合約和外部合約呼叫 https://read.cash/@vcckvv/5-dd02cd35 智能合約教學(6) Web3聊天室 https://read.cash/@vcckvv/6-web3-890c2352 智能合約教學(7) 去中心化交易所 https://read.cash/@vcckvv/7-20ec37b5 智能合約教學(8) NFT合約 https://read.cash/@vcckvv/8-nft-1e016366 智能合約教學(9) NFT去中心化交易所 https://read.cash/@vcckvv/9-nft-168dfdcd

@vcckvvOnNoiseApp

今天卜問的是加密貨幣交易平台Voyager(Voyager Token、VGX幣) 卜問Voyager一年之內的發展如何?卜得隨九五震 隨九五,孚于嘉,吉。 [變卦震]六五,震往來厲,億无喪,有事。 看資料這家交易平台是三箭資本的大債主之一,之前被三箭資本破產燒到所以跟著破產了: 三箭災戶|Voyager Digital 正式申請破產保護!估債權人超過 10 萬名 https://www.blocktempo.com/voyager-seeks-bankruptcy-protection/ 這次會卜問這一家是因為其平台幣VGX突然市值排名飛漲起來,查了一下應該是這個新聞所致: 幣安傳積極欲收購Voyager資產、$VGX一小時暴漲60% ;Coinbase評估後撤手 https://www.blocktempo.com/binance-eager-to-buy-voyager-digital-assets/ 這裡的變卦是震卦,有震驚性質的事件都和此卦有關,所以符合Voyager現在的震盪不穩的狀態 從卦象來看,爻辭「孚于嘉」可解釋成「俘虜和嘉禮」,「俘虜」就是指Voyager破產不得不變賣資產的困境,嘉禮則是某些慶賀性質的良善活動,雖然收購案目前還沒確定,不過應該遲早會被某間大公司收去,所以值得慶賀 不過這個卦的本質並不容易擺脫困境,需要接手的人好好大力整頓一番才能展現其價值,如「震往來厲,億无喪」所示,整體而言這一年的發展仍然是不穩定的,暴漲之後也可能暴跌 2022年8月27日1時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈Orbs(ORBS幣) 卜問Orbs一年之內的發展如何?卜得謙六二升 謙六二,鳴謙,貞吉。 [變卦升]九二,孚乃利用禴,无咎。 在擴充區塊鏈的技術上一般分成Layer1、Layer2的技術,而Orbs的特點就在於宣稱它是Layer3的技術,可以同時讀取第1層和第2層鏈上的活動,進一步加強了智能合約的複雜度功能,這種強調「升級」的特性就符合變卦升卦的性質 因為本卦是「苦行」之卦的謙卦,所以Orbs這一年應該是比較難以獲得利益,需要在缺乏資源的狀態下發展下去,不過爻辭「鳴謙,貞吉」暗示即便在這種情況下也可能得到盟友的合作,但這種合作就像君子之交淡如水,沒什麼太多的利益往來 從市場表現來看的話,變卦是緩慢上升的升卦,所以應該還是會有些逐步向上的力量,但沒有資源注入的話就只能靠自身的誠意去感動別人投資,這點需要仰賴開發團隊的努力 2022年8月26日3時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈iExec RLC(RLC幣) 卜問iExec RLC一年之內的發展如何?卜得節九五臨 節九五,甘節,吉。往有尚。 [變卦臨]六五,知臨,大君之宜,吉。 iExec RLC的主要目標是要利用區塊鏈技術來提供去中心化雲端計算資源,要說特點的話大概就是運用範圍比較廣,不同的計算裝置會有不同的適合的計算領域,iExec RLC的系統會自動去分配適合的計算裝置給需要的使用者,而這邊的本卦節卦具有「計算」和「節儉分配資源」的性質,所以符合iExec RLC的本質 記得這個卦在卜問DAI時也遇到過( https://noise.cash/post/jp7g059dn05wx ),DAI畢竟是穩定幣項目,所以遇到節卦這種需要節制性質的卦象還算能平穩發展,不過如果是一般追求利益、增值的項目,那麼節卦的節制性質就變得較難得到利益,可能會遇到資源缺乏、盜賊攻擊的問題,雖說這一卦是「甘節」(甘於節制),所以還算撐得下去,只是很難期待會有較好的市場表現 這一卦的系統或多或少會出些問題,不過變卦是「監督」性質的臨卦,如果開發團隊有好好在監視系統上的問題的話,那麼通常就能在短時間內解決 2022年8月25日1時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈Nano(XNO幣) 卜問Nano一年之內的發展如何?卜得未濟初六睽 未濟初六,濡其尾,吝。 [變卦睽]初九,悔亡,喪馬勿逐,自復。見惡人,无咎。 Nano的主要特點在於使用了「開放代表投票」(Open Representative Voting,ORV) 機制,使用者投票選出信任的節點,然後由這些節點進行交易區塊的安全確認,而這裡的變卦睽卦是具有「遠距離聯繫」性質的一卦,所以和這種「網路投票出節點」有關 從卦象來看,這有可能是不夠嚴謹的系統,本卦未濟卦是一個不做計畫就進行冒險的一卦,系統裡面可能假設使用者大多都是好人、選出的大都是好節點,不過變卦爻辭「見惡人,无咎」就說明了這一年很有可能會遇到惡人而遭到攻擊,最後會有一些損失,不過從爻辭「喪馬勿逐,自復」來看,有些損失可以幸運追回來或是從其他地方補償回來,以整體來看,發展得應該是不太好,不過可能意外地撐得下去 2022年8月23日20時

@vcckvvOnNoiseApp

今天卜問的是DeFi的Injective Protocol (INJ幣) 卜問Injective Protocol一年之內的發展如何?卜得大有初九鼎 大有初九,无交害,匪咎,艱則无咎。 [變卦鼎]初六,鼎顛趾,利出否,得妾以其子,无咎。 Injective Protocol是一個Layer2去中心化的交易協議,主要運作是使用其Injective Chain區塊鏈來建立去中心化的訂單簿,並用跨鏈橋連結以太坊的各個生態系進行代幣轉移,當中有一個設計較為特別,那就是為了保證交易的公平性,不允許某個人付出較高的手續費而可以插隊提早交易,所以引進了可驗證延遲函數(Verifiable Delay Function),基本上可以想像成給出一個排隊的證明,說明自己確實等了多長的時間,那麼等最長時間的人就可以先進行交易,而這個證明當然是沒辦法事先偽造出來,也不能用多台電腦提升產生證明的速度 這個可驗證延遲函數的性質就符合變卦鼎卦的性質,鼎卦的卦象也是多個人事物的競爭,但等待最長時間的人事物會最終勝出 從卦象來看,雖然大有卦通常代表項目背後有豐富的資源、大力的金主,但初爻「无交害」卻往往得不到資源,而其原因很可能就是因為系統有某些問題,所以必須要把問題排除掉(「鼎顛趾,利出否」),從爻辭「得妾以其子」來看可能以太坊生態系這邊會有些變動,所以要擴大到別的生態系去獲得利益,如果情況不是那麼嚴重,那麼也可能只是開發出某種新功能來獲得利益 整體來看,因為獲得資源不足,系統上又可能有某些問題,所以這一年應該是發展得不怎麼樣,可能要等到之後有些問題排除、發展計畫確定,情況才會好轉一些 2022年8月23日1時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈Energy Web Chain(EWT幣,Energy Web Token) 卜問Energy Web Chain一年之內的發展如何?卜得坤六四豫 坤六四,括囊,无咎无譽。 [變卦豫]九四,由豫,大有得。勿疑,朋盍簪。 Energy Web Chain是由能源網路基金會(Energy Web Foundation)所建立,看資料應該是想把區塊鏈技術運用到再生能源電網之中,讓能源提供者和用戶可以透過區塊鏈互相交易、分享資訊,而這裡的本卦坤卦和一切柔軟可變、可擴充的東西都有關,所以和Energy Web Chain相關的「電網」便符合其性質 坤卦是廣納百川之卦,豫卦則是儲備之卦,可以見得這一年Energy Web Chain的服務規模會越來越大,如爻辭「大有得」所示,不過這個「大有得」不一定代表實際想要的利益,相反地,坤卦的財富往往只是紙上富貴 Energy Web Chain的系統實際上有許多問題,比如說區塊鏈太依賴現實的數據,所以採用了權威證明PoA的架構,權威證明的節點都必須認證過,所以是相當中心化的系統,本質上和傳統中心化系統相比也沒有太大的優勢 而從爻辭「括囊,无咎无譽」來看,發展時有可能會太浪費錢,同時也可能因系統問題而產生不好的名聲,整體來說規模雖然會變大,但市場表現可能就普普通通,算是稍微有點華而不實的項目 2022年8月21日23時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈技術Request Network(REQ幣) 卜問Request Network一年之內的發展如何?卜得咸初六革 咸初六,咸其拇。 [變卦革]初九,鞏用黃牛之革。 Request Network的目標是建立一個去中心化支付網路,當然如果只有支付功能的話實在是沒有什麼特點,Request Network的特點在於包含了會計、審計、物聯網、點對點開發票的完整一套支付體系,要來代替傳統中心化的支付管理,這點就符合變卦革卦的改革性質 不過說實在的,這套系統和傳統中心化的系統相比並沒有太大的優勢,如果傳統支付系統已經能夠在市場上良好地運作,那麼也沒有特地去改變它的理由,所以這裡的卦象也呈現出「無法感動人」(「咸其拇」)、「時機未到而無法改革」(「鞏用黃牛之革」)的性質,從這點來看,這一年的發展應該是不會有什麼太大的變化,市場表現可能就只是跟著大盤漲落而已 2022年8月21日0時 --------------------------------------- 來回顧一下EOS的占卜結果:https://noise.cash/post/9zmgqn9b0z5m6 之前看到這篇新聞: EOS 網路基金會宣布推出新分叉公鏈 Antelope,取代 EOSIO 協議 https://www.blocktempo.com/eosio-rebrands-to-community-led-protocol-antelope/ 硬分叉的計畫是去年年底就有提到,之前解讀卦象時說沒有大計畫這點其實說得不是很好,應該說成沒有大利益的計畫,EOS把Block.one踢走後也沒有好好開發現有EOSIO 的鏈,而是搞個硬分叉的新公鏈,雖然號稱品牌重塑,但逐小利的本質仍然沒變,這種行為就很符合旅卦的「為小利而搬遷」的性質以及遯卦「不負責任的遁逃」的性質

@vcckvvOnNoiseApp

今天卜問的是去中心化交易所Ellipsis Finance(EPS幣) 卜問Ellipsis一年之內的發展如何?卜得震九四復 震九四,震遂泥。 [變卦復]六四,中行獨復。 Ellipsis可以當作是BSC鏈上的Curve,因為代碼就是經過Curve的官方授權,放到BSC鏈上去運作,其主打的特性是低滑點(低交易耗損)、低手續費,低滑點就是讓交易產生的震盪盡可能的小,而這點就符合爻辭「震遂泥」 從卦象來看,這一卦志向無法光大,有什麼計畫的話都可能陷入泥濘之中難以前進,變卦復卦則是向外追求利益,但通常會發現走錯道路而不得不想辦法回歸正常的道路,從本卦震卦的本質來看,所謂的低滑點可能實質上並不穩定,也許會遇到某些意外而讓穩定幣的買賣價格不那麼穩定,這一年對Ellipsis開發團隊最好的做法就是保守發展,遇到問題就好好處理,不要太期待市場上的表現 2022年8月19日18時 ------------------------------ 來回顧一下USDC的占卜結果: noise.cash/post/85gxv9pt0x6z9 之前看到這則新聞: USDC錢潮出走!Circle凍結資產引爭議,16億鎂USDC轉移至USDT https://www.blocktempo.com/one-point-six-billion-rush-into-usdt/ 嚴格來說,這種凍結資產的手段比起幣價不穩定要更為危險,因為不管擁有多少都會直接變成虛設的數字(虛文),這點在預測中有提到其可能性,不過沒想到會是以這種方式來實現 而爻辭「舍車而徒」(捨棄車子而用腳行走)也有暗示出錢潮出走的結果,不過說實在的USDT的名聲其實也沒有更好,USDT也有能力去凍結資產,只是不會像Circle那樣聽美國政府的話直接出手,所以說「舍車而徒」算是很適合的比喻

@vcckvvOnNoiseApp

今天卜問的是WINkLink(WIN幣) 卜問WINkLink一年之內的發展如何?卜得泰六四大壯 泰六四,翩翩,不富以其鄰,不戒以孚。 [變卦大壯]九四,貞吉,悔亡,藩決不羸,壯于大輿之輹。 看資料WINkLink是波場TRON首個去中心化的預言機(oracle),所謂的預言機就是把現實的一些數據(比如某項目的現時價格)定期更新到鏈上的系統,可說是連接現實和虛擬的一個機制,或者說是突破區塊鏈的限制到現實世界,而這裡的泰卦具有「陰陽交融」的卦象,大壯卦則有「突破框架」的卦象,所以符合WINkLink的性質 TRON是著名的孫割(孫宇晨)所創立,WINkLink應該背後也是有TRON官方在控制,爻辭中提到「不富以其鄰,不戒以孚」,這一卦其實帶有偷盜或失財的性質,所以估計這個預言機產生的資訊會有些問題,可能資訊不會很公正而容易使投資者失財,所以並不建議投資和WINkLink有關的項目 從市場表現來看的話,可能會因為大壯卦的突破性質而有些聲勢,不過因為有破財之象,所以還是不要期待太多會比較好 2022年8月18日20時

@vcckvvOnNoiseApp

今天卜問的是Layer2技術NuCypher(NU幣) 卜問NuCypher一年之內的發展如何?卜得豐六二大壯 豐六二,豐其蔀,日中見斗,往得疑疾,有孚發若,吉。 [變卦大壯]九二,貞吉。 看資料NuCypher的主要目標在於加強主鏈的加密能力,和一般區塊鏈使用的公鑰加密技術不同,NuCypher著重的是「端對端」或「N對N」的加密服務,除此之外還有管理私鑰、管理私密資料的存取權限的平台,而這裡的豐卦是六十四卦中代表「神祕」性質的一卦,因此NuCypher的加密性質與其有關 以現在市場來說,公鑰加密系統其實就有相當不錯的安全性和運作效果,所以就NuCypher的本質來說並不能產生足夠的市場優勢,從卦象來看,豐卦雖然表面上看起來可以獲得豐碩的成果,但這些成果很可能不是最想要的利益,不過這一卦也不是表現很差的一卦,雖然會讓人懷疑它的價值,但如果努力開發的話也是會有些加密功能是想讓人採納進來的(「往得疑疾,有孚發若,吉」),這一年對NuCypher最好的做法就是平穩發展,不該為了追求利益而衝過頭 2022年8月17日21時

@vcckvvOnNoiseApp

今天卜問的是DeFi的abracadabra.money (SPELL幣、穩定幣MIM(Magic Internet Money)) 卜問Abracadabra一年之內的發展如何?卜得无妄九五噬嗑 无妄九五,无妄之疾,勿藥有喜。 [變卦噬嗑]六五,噬乾肉,得黃金,貞厲无咎。 Abracadabra是一個借貸平台,基本的協議架構是讓借款人抵押資產,鑄造成穩定幣MIM,然後透過Curve來換成其他的代幣使用,之後要還款時再還回MIM和鑄幣利息,就可以拿回之前抵押的資產,而如果MIM和美元脫勾貶值,就等同鼓勵借款人買入便宜的MIM去還款套利,藉由這種方式來維持MIM的穩定性,而這種非系統本身去調控、而是放著讓它自然回復穩定的做法正好符合爻辭「无妄之疾,勿藥有喜」 從過去的情況來看,這個系統實際上並不穩定,MIM之前就有二次重大脫勾事件,不過從卦象來看,因為系統還算設計得巧妙,所以時間拖久後還是會回復正常,但是穩定幣最理想的情況還是要能時時保持穩定的美元價格,因此雖然是死不了的系統,但也很難期待從中獲得很多的利益 從這卦象來看,這一年應該還是會遇到一些意外脫勾的問題,也許裡面會有些套利的空間,不過如果是操作技巧不夠好的投資者還是建議不要亂碰,因為本卦的无妄卦意外很多,而變卦噬嗑卦則是容易犯下錯誤遭到懲罰 2022年8月16日20時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈Flux(FLUX幣) 卜問Flux一年之內的發展如何?卜得蠱上九升 蠱上九,不事王侯,高尚其事。 [變卦升]上六,冥升,利于不息之貞。 看資料Flux是Zcash的一個分支,Zcash的本質很重視匿踪性,不過Flux則是著重在用區塊鏈技術實現雲端運算、雲端服務,可以想成是亞馬遜AWS、Google Cloud的去中心化版本,這裡的蠱卦本質是一個子承父業的一卦,不過到了上九的「不事王侯,高尚其事」之後就開始改走出自己的道路,所以符合Flux的性質 從變卦爻辭「冥升,利于不息之貞」可以看出有些強勢上升的氣勢,不過這一卦很容易遇到阻礙然後回降,所以最終結果不能算是發展得很好,爻辭「不事王侯,高尚其事」顯示出可能會計畫某些獨特的功能,但是不會特別迎合市場來開發,所以市場表現上也有其限度 2022年8月15日21時 --------------------------------------- 來回顧一下之前美國經濟的占卜結果:noise.cash/post/gjm8p4rbkqmw3 今天看到這則新聞: 美國CPI年增回落,Q4有望放緩升息速度! https://money.udn.com/money/story/5599/6538668 不只通膨放緩,就業數據也回到疫情之前的狀態,所以美國國內市場的確如預測一樣是在回復的狀態,不過還要再看看後續的情況

@vcckvvOnNoiseApp

今天卜問的是區塊鏈平台ABBC(ABBC Coin) 卜問ABBC一年之內的發展如何?卜得革九四既濟 革九四,悔亡,有孚,改命吉。 [變卦既濟]六四,繻有衣袽,終日戒。 看資料ABBC幣原本是BTC的一個分支,後來轉換到EOS.IO的區塊鏈上運作,而平台ABBC的目標是要建立多鏈錢包,可以使用各種加密貨幣、ERC20代幣的支付,並支援50家以上的線上零售,開發團隊才23 人,不過目標也算很大。而從BTC分支轉換到EOS.IO的區塊鏈符合革卦的變革性質,追求的目標很大則符合既濟卦的挑戰性質 ABBC最近比較大的新聞應該是成立去中心化交易所DOMINO: https://www.globenewswire.com/news-release/2022/07/20/2482731/0/en/ABBC-Foundation-Formally-Launches-Next-Generation-Decentralized-Exchange-DOMINO.html 不過剛上市難免可能會遇到一些需要修改的問題,這一卦的性質也差不多,有著許多需要時時解決的問題和挑戰,如果開發團隊夠力的話,那麼就多少能展現出一些市場成績(「悔亡,有孚,改命吉」),但要注意爻辭「繻有衣袽,終日戒」代表可能會遭遇一些意外的攻擊和漏洞,所以必須時時警戒才能撐住 2022年8月15日1時 --------------------------- 來回顧一下火幣交易所的占卜結果:https://noise.cash/post/5rxrq3rhwmx9n 最近看到這則新聞: SBF、孫宇晨搶收購「李林30億美元的火幣股權」!HT爆漲 25.8% https://www.blocktempo.com/li-ready-to-sell-huobi-stake-at-3-billion-and-sbf-sun-want-to-buy/ 雖然還沒定案,不過火幣網看來很有機會易主,這個時候就符合「旅即次,懷其資,得童僕貞」,有新的資金注入,同時也和新主人背後的公司進行合作,這些都符合之前的預測,不過有一個解讀不太對,是納入別人的旗下,而不是把別人納入自己的旗下

@vcckvvOnNoiseApp

今天卜問的是區塊鏈技術平台MediBloc(MED幣) 卜問MediBloc一年之內的發展如何?卜得鼎初六大有 鼎初六,鼎顛趾,利出否。得妾以其子,无咎。 [變卦大有]初九,无交害,匪咎,艱則无咎。 目前的醫療資訊系統主要是以醫療機構來進行管理,資料分散在不同的醫療機構,而MediBloc平台想做的就是利用區塊鏈技術把這些醫療資訊整合起來一起管理,醫療機構可以在使用者同意的情況下從當中的加密的資料獲得需要的資訊,而另一方面系統會對作出貢獻的使用者和醫生提供MED幣獎勵,MED幣則可以用來在MediBloc的多種合作機構中作為醫藥費或保險費等的支付手段,而這裡的變卦大有卦是藏富之卦,財富可以是指金錢或是知識、資訊,而這裡就是指MediBloc加密起來的有價值的醫療記錄資訊 從爻辭「鼎顛趾,利出否」來看,原意是指把鼎顛倒然後倒出不要的東西,由此可見MediBloc收集的資訊未必是有用的,就好像不同地方的醫生或設備的水準不一定是相同的,所以收集起來的醫療記錄也可能品質參差不齊,MediBloc如果要改變這種問題,勢必要對系統做一些革新的處理,這可能就是MediBloc這一年要努力的方向 至於變卦爻辭「无交害」可能代表著和合作的金主關係分裂,也許需要另外在財源上想想辦法而要做出一些形象比較不好的撈錢計畫(「得妾以其子,无咎」),這一年應該不算有豐厚的財源可以發展,整體而言需要長時間的努力才多少有些市場表現(艱則无咎) 2022年8月14日3時 ------------------------------------- 來回顧一下兩大賣虛擬房地產的項目的占卜結果: The Sandbox(SAND幣) noise.cash/post/jp04q27cn05wx Decentraland(Mana幣) noise.cash/post/qz3ppvwa56z9q 最近看到這二篇新聞: 兩大元宇宙平台土地價格大幅下跌,林俊傑持有的虛擬土地價值浮虧超過 80% https://zombit.info/metaverse-land-sales-crash/ 虛擬房地產狂殺8成!科技富豪轟「買元宇宙圈地」:史上最蠢投資 https://esg.ettoday.net/news/2314361?redirect=1 The Sandbox的結果算是不意外,從卦象來看就是滿滿的風險,而另外一邊Decentraland占卜結果其中的履卦也是容易遇到危險的一卦,本卦兌卦則往往遭受罵名,對這種需要名聲才賣得好的東西自然很難期待能在熊市中活得很好,不過Decentraland的卦象比較有反省檢討的性質,所以之後也許還會有些計畫來改變困境

@vcckvvOnNoiseApp

今天卜問的是DAO Maker(DAO幣),注意和Maker DAO(MKR幣)不同 卜問DAO Maker一年之內的發展如何?卜得謙六五蹇 謙六五,不富以其鄰,利用侵伐,无不利。 [變卦蹇]九五,大蹇朋來。 看資料DAO Maker是一個 IDO 平台,IDO (Initial DEX Offering)的意思就是首次在去中心化交易所上發行代幣,用戶可以通過質押DAO代幣來參與代幣銷售,而發行代幣這個行為本質其實是項目的「募資」,沒錢的項目方吸引有錢的投資客來投注金錢,所以符合爻辭「不富以其鄰」(不必使用金錢就可請鄰居幫忙) 從卦象來看,謙卦是苦行之卦,所以這一年DAO Maker應該是沒辦法獲得多少利益,畢竟是遇到熊市,願意花大錢的投資客會相對少很多,而且發行代幣的項目方如果很快就倒了,DAO Maker應該也會遭受一些批評(「利用侵伐」) 不過即便在這種艱苦的情況下DAO Maker應該還是會陸續有一些案子進來(「大蹇朋來」),如果開發團隊沒做多餘的事,那麼這一年應該還是撐得住,相反地如果做了壞事那麼這一卦也算是凶險的一卦 2022年8月13日0時 ------------------------- 來回顧一下Curve的占卜結果:https://noise.cash/post/85jqg40s0x6z9 是近看到這二篇新聞: Defi出大事》Curve域名服務器遭駭!CZ示警、官方:大家快取消授權用新網址 https://www.blocktempo.com/curve-dns-was-hacked/ Curve:curve.fi 已可安全使用,調查起因是DNS緩存中毒 https://www.blocktempo.com/curve-dns-outage-investigation/ 如預測的一樣有遭受到攻擊,而且攻擊的方式還是來自內部的DNS 緩存中毒,這種域名被綁架的攻擊可說是防不慎防,不過好在情況看起來並不嚴重,從卦象來看應該還有後續的攻擊,建議大家小心一下,多多注意DeFi的合約位址有沒有出問題

@vcckvvOnNoiseApp

畫名:「an Elf」 原圖:https://i.imgur.com/BGUxwCt.png 作畫過程gif:https://i.imgur.com/jdwdfbP.mp4 這張畫的構圖其實好幾年前就已經構思好,不過當時的能力還不足以畫好這樣的畫,所以放了很多年都沒有正式來畫,今年年初覺得自己的畫力到了一定程度之後便開始來挑戰這樣的畫 構圖上算是很貪心地把各種想畫的東西塞進來,用了很多不同的方法在畫每一個小部份,不過整體來說還是做了很多妥協,沒有完全發揮自己的畫力,原本預計的畫風應該更加寫實,後來轉成使用更好調整表現的明亮色調 這張畫畫了大概半年多,其實按照之前的狀態的話應該可以在一個月內完成,今年感覺不太到對繪畫的熱情,常常隔幾天才畫一點,每次畫可能畫不到十幾分鐘就停筆,所以才會拖了半年才畫完orz 之前有說要弄個NFT,趁這次機會也來製作一下,弄了6張,統一定價0.077 BCH: https://oasis.cash/token/0x8912ee75259778aa70981b73307c8b1b6b4a9ee1/126 https://oasis.cash/token/0x8912ee75259778aa70981b73307c8b1b6b4a9ee1/127 https://oasis.cash/token/0x8912ee75259778aa70981b73307c8b1b6b4a9ee1/128 https://oasis.cash/token/0x8912ee75259778aa70981b73307c8b1b6b4a9ee1/129 https://oasis.cash/token/0x8912ee75259778aa70981b73307c8b1b6b4a9ee1/130 https://oasis.cash/token/0x8912ee75259778aa70981b73307c8b1b6b4a9ee1/131 不過因為是熊市,再加上上架的smartBCH鏈之前遇到意外,所以估計大概是賣不出去,這裡就只是做好玩的而已 下一張預計要畫的圖已經有一些想法了,沒意外的話大概要再畫個半年才會生出來(苦笑 ( ̄▽ ̄")

@vcckvvOnNoiseApp

今天卜問的是穩定幣平台Reserve Rights(RSR幣、RSV穩定幣) 卜問Reserve Rights一年之內的發展如何?卜得臨上六損 臨上六,敦臨,吉,无咎。 [變卦損]上九,弗損,益之,无咎,貞吉,利有攸往,得臣无家。 看資料Reserve Rights的穩定幣機制是抵押型穩定幣和算法穩定幣的混合,本身由其他數位資產抵押作為擔保,如果抵押不夠支撐價格就會生成新的RSR幣來買進更多的資產抵押,反之如果抵押太多,就會進行拋售來買回RSR幣銷毀,透過這種RSR工具幣來達成價格穩定的效果,這正好符合爻辭「利有攸往,得臣无家」,RSR工具幣就是RSV穩定幣的忠心臣子 從卦象來看,這個機制其實並沒有很嚴謹地運作,所以爻辭是「敦臨」,以較為寬大的形式在調整價格穩定,可以預期短期內多少都會有波動,爻辭說「弗損,益之」,實際情況則往往是有損有益,所以要多費些功夫修正回來,不過這個卦的長期表現還行,開發團隊能即時把問題修好的話,這一年的發展也不會太差 2022年8月9日21時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈協議Ren(原名Republic Protocol,REN幣) 卜問Ren一年之內的發展如何?卜得屯六四隨 屯六四,乘馬班如,求婚媾,往吉,无不利。 [變卦隨]九四,隨有獲,貞凶。有孚,在道以明,何咎? Ren是一種開放式的暗池協議,所謂的暗池就是不公開的交易平台,對某些大型投資機構來說如果交易部位或交易策略曝光就可能產生一定程度的被狙擊的風險,所以產生了暗池這種非公開的交易平台用來解決這種風險問題,而Ren不只要做出暗池的功能,而且還要達成跨鏈交易的功能,讓各個不同的區塊鏈之間可以安全隱密地進行代幣交易,最終消除各個區塊鏈之間的流動性障礙,而這裡的變卦隨卦是得失無常的交易之卦,爻辭則有「求婚媾」,比喻各個區塊鏈之間合作連結,所以符合Ren的性質 從卦象來看,Ren這一年的發展還不錯,可以預計和多個對象合作結盟,能支援的區塊鏈會越來越多(「乘馬班如,求婚媾,往吉,无不利」),不過要注意變卦卻是這樣說:「在道以明,何咎」,這一卦最好的情況是走光明正大的道路,如果走的是歪路、暗路,那麼就會陷入得失無常的危險,就這點來說,儘管程式碼都是公開的,但Ren的暗池本質使其沒辦法完整展現出真正的市場實力,所以市場表現很可能會打一些折扣 綜合來看,我認為Ren算是長期有潛力的項目,但是在熊市的狀態下暗池的運用價值並不夠高,要等到其有突出的表現可能還要再等等 2022年8月9日3時

@vcckvvOnNoiseApp

今天卜問的是Layer2解決方案Celer Network(CELR幣) 卜問Celer Network一年之內的發展如何?卜得臨六四歸妹 臨六四,至臨,无咎。 [變卦歸妹]九四,歸妹愆期,遲歸有時。 常見的Layer2一般都是針對某個主流鏈去進行擴展,不過Celer Network則是設計成在以太坊、Polkadot 、幣安智能鏈等區塊鏈上都能運行,甚至可以在支援的不同鏈間做一些跨鏈的處理,也就是說Celer Network在本質上可以和任何鏈形成連結關係,而非單一鏈的綁定關係,而這種性質就符合「可以與任何人合作結盟」的歸妹卦 以爻辭「歸妹愆期,遲歸有時」來說,Celer Network可能會有些計畫延遲,也可能是指這個系統的運作效率較差,所以網路會有些阻塞延遲的問題,不過因為本卦臨卦是監督之卦,所以出了錯遲早都能抓出來,不會到最後都沒辦法解決 而從市場表現上來看的話,近期的發展還不錯,看新聞最近有宣布支援Klaytn跨鏈資產轉移( https://news.cnyes.com/news/id/4925498 ),不過歸妹卦是很容易開高走低的一卦,所以之後就要注意可能會遇到一些問題 2022年8月7日23時

@vcckvvOnNoiseApp

今天卜問的是區塊鏈Nervos Network(CKB幣) 卜問Nervos Network一年之內的發展如何?卜得恒九四升 恒九四,田无禽。 [變卦升]六四,王用亨于岐山,吉,无咎。 看資料Nervos Network最大的特點就在於對「區塊鏈存儲」這塊進行限制,在ETH上只要有智能合約發布,那麼合約的資料和空間就會擁久佔用在區塊鏈上,即便這個項目已經被淘汰、不再有人使用,所以Nervos Network為了解決這個問題便限制必須要抵押相應數量的CKB代幣才能讓合約有空間可以使用,因此透過調整CKB代幣總量就可以調節整個虛擬機器系統的資源所需大小,而這種讓資源消耗變緩慢的方法便符合緩慢變化之卦的升卦 Nervos Network這樣做的確有它的好處,不過以ETH目前的發展來看,這個問題還不是需要急迫解決的重要問題,所以Nervos Network的這個特點並無法使其在市場上擁有優勢,因此爻辭有云:「田无禽」(田獵中抓不到獵物),說明獲得不了利益,這一年在發展上也很緩慢,不會有什麼重大突破,這個卦如果要發展下去,就只能要更有耐心地去開發,不能追求任何急利,否則在熊市中很可能被淘汰掉 2022年8月7日3時

@vcckvvOnNoiseApp

依照預告,這次要來實作NFT的去中心化交易所,沒看過之前智能合約的介紹的話可以先去看一下之前的文章: (1) https://noise.cash/post/jgmg36rhn05wx (2) https://noise.cash/post/r6v7389f5k67z (3) https://noise.cash/post/66xr32vf23r65 (4) https://noise.cash/post/n4qngmpb0n34w (5) https://noise.cash/post/66484zga23r65 (6) https://noise.cash/post/gjv6vj5tkqmw3 (7) https://noise.cash/post/75xwp79hj795p (8) https://noise.cash/post/mpj5v0xt8m7p3 首先實際操作一遍NFT去中心化交易所看看: https://vcckvv.github.io/SmartContract/Poolnft/ 其中用到的合約程式碼為: https://mumbai.polygonscan.com/address/0xFFC56B04A7D67fB0e565d9e938aba14c496C6060#code 1.首先還是一樣,要先有安裝MetaMask的瀏覽器外掛並且開啟起來,然後打開網頁後會要求連結MetaMask錢包、切換到Mumbai測試鏈 2.如果沒有Mumbai的MATIC幣就點選水龍頭網站連結去取得,也就是https://mumbaifaucet.com/ 3.主網頁的最下方會顯示這個帳號擁有的NFT,不過一開始沒鑄造還沒有NFT,這個網頁也只會顯示這個合約的NFT,不會像OpenSea一樣另外顯示其他合約的NFT,所以接下來我們直接去鑄造新的NFT 4.點選鑄造新的NFT的連結:https://vcckvv.github.io/SmartContract/Poolnft/mint.html ,介面如圖一 5.這裡上傳圖的方式和一般NFT使用IPFS網址的方式不同,這裡允許圖上傳到任何的網頁空間或圖床網站,甚至之後圖片被刪掉也可以上傳到其他網站並修改網址,而為了保證圖片的唯一性,這裡會讀取圖片的資料並計算其sha256的hash,然後資料上鏈後就無法再改變hash,之後當我們檢視NFT時,就能透過這個hash來檢驗圖片是不是相同的資料 這裡推薦的上傳圖的網站是github給的網頁空間,不過如果有其他用的順手的上傳圖的網站也可以拿來使用,要注意有些網站不允許跨域讀取資料,所以可能可以顯示預覽圖,但是卻無法讀取資料計算出hash,這個叫CORS問題,遇到這個問題就直接換一個網站就好 上傳圖完取得圖片網址然後輸入表單欄位,確定預覽圖和hash都有顯示出來,然後輸入標題和描述,按下「鑄造」的按鈕後MetaMask會跳出視窗要簽署交易,簽署完後等待一段時間上鏈消息出來就算鑄造完成,網頁底下會產生新的NFT連結可用來檢視 值得一提的是,Mumbai測試鏈好像沒goerli鏈那麼穩定,有時會有塞車的現象,所以不一定會在30秒內完成上鏈,這時就要點選MetaMask的加速交易的功能,來快點完成上鏈 6.檢視個別的NFT網頁的介面如圖二,不過因為同時擁有創造者和擁有者的身份,所以底下還會有其他的介面可以使用 7.首先是擁有者具有的拍賣功能,可以設定拍賣結束時間和直購價、起標價,如果只想要讓人直購,那麼結束時間就設成現在或過去,這樣的話一開始拍賣時間就結束,只能用直購價購買 一旦開始拍賣,在NFT列表中就會在這個NFT上額外顯示「拍賣中!」的訊息,並且點進去會有投標的介面 如果沒有人投標或是投標者就是擁有者,則擁有者可以隨時停止拍賣,但如果有別的投標者,則不能停止拍賣 一旦拍賣時間結束,這時投標者或擁有者都可以進行「完成交易」的動作,這個動作會把錢和NFT轉交過去,此時投標者才正式擁有NFT,不過要注意其他人也可以在這個時候用直購價直接買下 8.擁有者還具有傳送NFT給別人的介面功能,這個功能在拍賣中的狀態時會無法使用 9.最後是創造者和擁有者都有的「重設JSON資料」介面功能,這裡可以改掉JSON標題、描述、以及圖片網址的資料,這個功能主要是為了避免上傳的圖片網址出問題,所以可以隨時進行修改 10.和之前聊天室的功能一樣,每個帳號都可以設定自己獨有的名字,可以到這個網頁去設定:https://vcckvv.github.io/SmartContract/Poolnft/name.html 11.接下來是介紹各種NFT列表的網頁: 全部的NFT列表 - https://vcckvv.github.io/SmartContract/Poolnft/all.html 某人擁有的NFT列表 - https://vcckvv.github.io/SmartContract/Poolnft/own.html 某人鑄造的NFT列表 - https://vcckvv.github.io/SmartContract/Poolnft/creator.html 某人拍賣的NFT列表 - https://vcckvv.github.io/SmartContract/Poolnft/auction.html 某人投標的NFT列表 - https://vcckvv.github.io/SmartContract/Poolnft/bid.html 基本功能很簡單,除了全部NFT列表不用查詢外,其他網頁只要輸入帳號位址或是帳號的名字然後點選查詢的按鈕,之後就可以看到查詢的結果 而某人投標的NFT列表還要另外輸入搜尋區塊的範圍,之所以做成這樣,是因為這部份的資料沒有存在合約之中,而是使用event的方式去記錄起來,然後透過之前提到的queryFilter函數來讀取出來(需要指定搜尋區塊的範圍) 值得注意的是,Mumbai測試鏈的RPC Server在這部份運作的效能似乎比較低,在搜尋較大的區塊範圍時會拖很多時間才會回應,所以網頁有時會有卡住的樣子,因為是免費使用的RPC Server,所以這裡也不好要求太多 12.最後是Log記錄網頁:https://vcckvv.github.io/SmartContract/Poolnft/log.html 一樣是用event的方式去記錄起來,所以要輸入搜尋區塊的範圍 因為ethers.js沒有提供「時間->對應的區塊數」的函數功能,所以這裡輸入的是區塊數,然後自動顯示對應的時間 一開始預設的範圍是「24小時之前的區塊~現在的區塊」,目前的Mumbai測試鏈的出塊速度大約是6秒,所以實際在javascript中是這樣設定的: let nowBlockNum = await provider.getBlockNumber(); startBlock.value=nowBlockNum - Math.floor(24*60*60/6); endBlock.value=nowBlockNum; 雖然不算精準的設定方法但是能用就好 13.這次的做法是把NFT和交易所功能寫在同一個合約中,所以沒有之前ERC20代幣的approve問題,拍賣系統可以直接把NFT轉換到得標者的帳號而不需要再另外去做approve()的動作,因為同一個合約的內部操作都可以使用不需要權限的內部函數,比如_transfer(),一般OpenZeppelin範例的內部函數名稱都會加底線 另外一提的是,一般NFT交易所都會允許加入不同的外部NFT合約,不過那樣一來的話就需要進行嚴格的安全性檢查,這裡因為嫌麻煩就沒另外加這個功能,所以這裡所有可以拍賣交易的NFT都是這個合約本身鑄造出來的 ---------------------------------------------- Poolnft的合約主要程式碼: https://github.com/vcckvv/SmartContract/blob/gh-pages/Poolnft/Poolnft.sol 這次的合約程式碼其實沒有什麼太多好說的,用到的都是之前已經提過的技術,儲存ID集合也是使用之前用過的紅黑樹資料結構,不過還是有幾點值得提一下: 在ERC721中提供了「_mint()和_safeMint()函數」以及「_transfer()和_safeTransfer()函數」,Poolnft裡面一律使用_mint()、_transfer(),主要原因是因為_safeMint()和_safeTransfer()有可能會呼叫外部合約的函數,也就是IERC721Receiver介面的onERC721Received 這個可以在https://github.com/vcckvv/SmartContract/blob/gh-pages/Poolnft/ERC721.sol 的931行上看到,然後_checkOnERC721Received()函數會被_safeMint()和_safeTransfer()所呼叫 雖然名稱加上safe,不過在網上查了一下資料,發現有些合約就是因為這個函數呼叫而產生漏洞,所以這裡就不使用以免產生問題 ---------------------------------------------- 這次繼承的是IERC721Enumerable,而不是上次的ERC721Enumerable,所以裡面的函數都需要自己實作,包含totalSupply()、tokenOfOwnerByIndex()、tokenByIndex(),ERC721Enumerable的主要功能在於提供可以依序列出所有NFT ID的函數 另外supportsInterface()則是用來顯示這個合約有哪些ERC721的實作功能,這裡直接照抄ERC721Enumerable的函數內容就好: function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {  return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } ---------------------------------------------- function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721) {  require(!auctionMap[tokenId].isActive);//拍賣時不能轉移  super._beforeTokenTransfer(from, to, tokenId);  if(from!=address(0) ){   ownMap[from].remove(tokenId);  }  ownMap[to].insert(tokenId); } _beforeTokenTransfer這個函數之前就只是照抄內容,不過這次要檢查不能在拍賣時進行轉移,同時如果進行轉移,就要把使用者擁有NFT ID集合進行更新的動作 ---------------------------------------------- 這次的合約程式碼就講到這裡,另外之前測試發布合約的時候遇到了一件特別的事,MetaMask直接把我發布的Poolnft合約顯示成「Rug Pull All」(如圖三),我猜想可能因為這個ERC721合約有涉及到交易和提領功能,和常見的ERC721合約不同,所以誤判成詐騙合約,不過之後MetaMask似乎有做過更新,所以後來發布的合約就沒有出現相同的誤判情況 ---------------------------------------------- 這次的網頁很多,程式碼都放在這個github目錄底下:https://github.com/vcckvv/SmartContract/tree/gh-pages/Poolnft ,接下來簡單講解一些值得說的東西 ---------------------------------------------- 這次網頁程式有簡單額外判斷是否有安裝MetaMask: if(typeof window.ethereum === "undefined"){  alert("error : 尚未安裝MetaMask,此網頁需要安裝MetaMask才能使用");  throw new Error(); } ---------------------------------------------- NFT的資料需要用到base64和JSON的技術處理,好在大部份用內建的函數就可以搞定: base64解碼可以使用atob(),編碼則是使用btoa(),但要注意沒辦法直接把UTF8資料塞入btoa()中,所以另外找了個Utf8Encode()函數來轉換資料: btoa(Utf8Encode(jsonStr) ) 而要讀取JSON資料可以使用: let jsonObj=JSON.parse(decodeURIComponent(escape(uri) ) ); 這裡為了正確處理UTF8文字,所以必須加上decodeURIComponent(escape())的處理 ---------------------------------------------- 因為有些使用者輸入資料會顯示在網頁上,所以要做一些處理來避免「代碼注入」: function toSafeUrl(url){  return url.replace(/</g, "%3C").replace(/>/g, "%3E").replace(/'/g, "%27").replace(/"/g, "%22"); } function toSafeText(str){  return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"); } 基本上就是把一些可能會被錯誤解讀的字元改成URL編碼或HTML entity碼,以避免任何可能的問題 另外因為JSON.parse()函數允許"\n"之類的字串自動轉換成換行字元,所以要對反斜線字元、雙引號字元、換行字元做特別的處理,這樣讀取起來才不會出差錯: function toJSONText(str){  return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n'); } ---------------------------------------------- 這次的講解就到這裡,目前沒有預定接下來要講解什麼,雖然還有很多題材可以說,像是如何更新合約內容,或是常見的合約漏洞,不過因為內容更為深入,講起來也沒有像聊天室或去中心化交易所那樣有趣,所以沒有特別想說,大概之後心血來潮才會再來寫些東西 最後來簡單總結下這次學習的心得: 其實在學寫智能合約之前就覺得EVM是還不成熟的技術,實際寫了之後就更加確信了這點,寫起來限制很多,不只要注意程式不能寫太大,而且要擔心gas費不能用太多,更重要的是如果沒有花時間研究常見的漏洞,會很容易一不小心就寫出漏洞來,我寫的二個去中心化交易所合約都有遇到隔了好幾天才發現有毀滅性的漏洞 不過這還只是小事,對外行人來說智能合約可能就像是「Code is law」的具體呈現,是很去中心化的東西,不過實際上看了一些項目的合約會發現,程式碼可以設置所謂的「管理員功能」,在極端的情況下,管理員甚至有能力把合約內容換掉(比如使用代理合約的技術),也就是說管理員想做惡的話隨時可以換成惡意合約的內容,然後捲款跑人,這種東西一點也不去中心化,不過卻可以騙到那些不會看合約的人,讓人覺得把錢放在裡面就不會被搞,講難聽點,在去中心化的系統裡面構造一個可以中心化的系統,這東西就是幣圈的毒蘋果 依照我個人的觀點來看的話,EVM系統應該遲早會大改,如果不改的話大概遲早會被其他競爭者取代掉,雖然那可能是好幾年以後的事情

@vcckvvOnNoiseApp

今天卜問的是區塊鏈Pundi X (PUNDIX幣) 卜問Pundi X 一年之內的發展如何?卜得升九二謙 升九二,孚乃利用禴,无咎。 [變卦謙]六二,鳴謙,貞吉。 Pundi X的發展目標主要在零售支付的市場上,宣稱設計了第一台使用區塊鏈技術運作的零售商終端機XPOS,而這裡爻辭中的「禴」是指從簡的祭禮,在易經卜卦上可以比喻成簡單的交易或儀式,所以符合零售支付的性質 看資料Pundi X雖然也有自己的區塊鏈網路,不過有些資料是放在以太坊上面的,可能會因為以太坊的網路問題而受到影響,而這裡的本卦是升卦,這個卦具有「緩慢」的性質,所以可能暗示Pundi X網路速度不快,還不算是成熟的支付技術,不過因為這一卦具有誠意感動上天的性質,所以Pundi X開發團隊有在認真做的話還是有一定成果 而從市場表現來看,變卦是苦行之卦的謙卦,所以得到的利益並不多,爻辭「鳴謙,貞吉」代表可能會遇到合作伙伴,不過大多應該都只是零售商,不會有什麼大金主注入資金 2022年8月5日0時

@vcckvvOnNoiseApp

依照預告,這次來講解怎麼寫NFT合約,沒看過之前智能合約的介紹的話可以先去看一下之前的文章: (1) https://noise.cash/post/jgmg36rhn05wx (2) https://noise.cash/post/r6v7389f5k67z (3) https://noise.cash/post/66xr32vf23r65 (4) https://noise.cash/post/n4qngmpb0n34w (5) https://noise.cash/post/66484zga23r65 (6) https://noise.cash/post/gjv6vj5tkqmw3 (7) https://noise.cash/post/75xwp79hj795p 首先一樣先來操作一下網站,獲得測試鏈的NFT:https://vcckvv.github.io/SmartContract/NFT/ 使用到的合約位址和程式碼: https://mumbai.polygonscan.com/address/0x8abb77ff22f8966729603bd49c5c049c4294efd5#code 這次的目標是要鑄造NFT並在OpenSea上顯示出來,因為OpenSea不支援goerli測試鏈,但是支援的rinkeby測試鏈之前有傳出不再升級、即將中止的消息(https://blog.ethereum.org/2022/06/21/testnet-deprecation/ ),所以這次是換到OpenSea另一個有支援的polygon Mumbai測試鏈 因為Mumbai測試鏈不是MetaMask內建的鏈,所以一般來說要在MetaMask中先輸入測試鏈的資料才能使用,不過這次我把新增Mumbai測試鏈的功能加到了網站之中,只要打開那個網站,MetaMask就會自動跳出要新增Mumbai測試鏈的視窗,接著也會自動要求連上Mumbai測試鏈 這邊應該沒多少人有用過Mumbai測試鏈,所以要先點網頁中的水龍頭連結https://mumbaifaucet.com/ 去取得測試鏈的原生代幣 MetaMask顯示收到MATIC幣後就可以來鑄造NFT,這個網頁有提供4種鑄造方式,前3種是同樣的兔子圖片,最後一種則是之前TEST代幣的圖標,隨便想要哪一種都可以,點選按鈕後簽署交易等待上鏈後就可以取得NFT了 接著到測試版的OpenSea上去看剛才取得的NFT:https://testnets.opensea.io/account ,如果太快打開可能OpenSea的系統還在處理所以看不到圖片,大概等交易上鏈一分多鐘後就能看到圖片了 ------------------------------------------ 接下來就來講解怎麼撰寫NFT合約,和之前撰寫ERC20代幣一樣,NFT合約實際上是符合另一個ERC721標準,只要合約中有某些特定的函數可以呼叫,那麼就會被視為NFT合約 這次一樣使用OpenZeppelin寫好的ERC721範例,來源為: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC721 合約程式碼為: https://github.com/vcckvv/SmartContract/blob/gh-pages/NFT/NFT.sol ------------------------------------------ // SPDX-License-Identifier: MIT pragma solidity ^0.8.14; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract NFT is ERC721, ERC721Enumerable, Ownable {  string[] uriArr;  constructor() ERC721("NFT Token", "NFT") {     }  function mint(string memory uri) public {   require(bytes(uri).length > 0);   _safeMint(msg.sender, uriArr.length);   uriArr.push(uri);  }  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {   require(tokenId < uriArr.length);   return uriArr[tokenId];  }  function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {   super._beforeTokenTransfer(from, to, tokenId);  }  function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {   return super.supportsInterface(interfaceId);  } } ------------------------------------------ 噪音顯示程式碼的空白縮排會有問題,所以上面的程式碼是用全形空白去顯示縮排,要複製程式碼請去網頁裡複製 上面的程式碼原本有註解URI的範例輸入,不過因為之後會講到所以這裡先刪掉 ------------------------------------------ import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; 這次並沒有把OpenZeppelin的檔案從中取出放到remix上,而是使用import的形式,remix可以用這種方式,直接從github網站中讀取出需要的程式碼 不過要注意etherscan和polygonscan的Verify and Publish並不支援這種import的形式,因此我又另外弄了一個程式碼把引用到的內容都丟進來: https://github.com/vcckvv/SmartContract/blob/gh-pages/NFT/NFT_long.sol 在polygonscan上放的也是這個較長的程式碼檔案: https://mumbai.polygonscan.com/address/0x8abb77ff22f8966729603bd49c5c049c4294efd5#code ------------------------------------------ contract NFT is ERC721, ERC721Enumerable, Ownable { 這一段讓合約NFT同時繼承三個合約,意思就是同時擁有這些合約中擁有的可繼承函數和變數 Ownable的功能實際上並沒有用到,ERC721Enumerable也可以不需要使用,這邊就只是照著範例去寫,因為加了也沒什麼問題所以就沒改掉了 ------------------------------------------ string[] uriArr; 這個陣列用來儲存每個NFT的URI,後面會提到具體放的是什麼東西 一般的NFT通常是只儲存一個baseURI,在baseURI後面再加ID數字來轉換成各個NFT的URI,不過這裡讓使用者可以自由輸入自己想要的URI,所以用陣列存起來 ------------------------------------------ constructor() ERC721("NFT Token", "NFT") { } 這裡調用繼承的ERC721的建構子函數,意思是說合約NFT在產生時也會呼叫ERC721的建構子函數,如下: (在https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol 之中) constructor(string memory name_, string memory symbol_) {  _name = name_;  _symbol = symbol_; } 所以"NFT Token"代表這個合約所有NFT的共同名字,而"NFT"代表這個合約NFT的token符號 ------------------------------------------ function mint(string memory uri) public {  require(bytes(uri).length > 0);  _safeMint(msg.sender, uriArr.length);  uriArr.push(uri); } 進行鑄造NFT,這邊只需要呼叫繼承的函數_safeMint(),以及把輸入的URI丟到陣列uriArr之中就好 注意其中第二個參數uriArr.length就代表這次鑄造的ID,換言之第一次鑄造會是ID=0、第二次鑄造會是ID=1,依此類推 ------------------------------------------ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {  require(tokenId < uriArr.length);  return uriArr[tokenId]; } tokenURI()是用來讀取NFT的ID對應的URI,OpenSea需要呼叫這個函數才會知道NFT的圖片網址在哪裡 ------------------------------------------ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {  super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {  return super.supportsInterface(interfaceId); } 這二個只要照著寫就好,內容只是呼叫繼承的上層合約的函數來用(super.),沒有其他特別的用意,不過沒寫的話會出現錯誤所以就寫進來了 ------------------------------------------ 接下來解釋NFT的URI是什麼,這次提供了4種不同的URI,依序進行解說: 1.正統的IPFS星際文件系統的網址格式,比如:ipfs://QmUtb97bLLNPYTYPzCPxuLhu3q4kRcMzhtrW7W5xJVgr9B IPFS是一種網路檔案協議,可以為每一種內容不同的檔案分配一個獨一無二的網址,雖然目前並沒辦法保證檔案可以永久存在,但至少可以保證不會有內容不同的檔案共用同一個網址,所以被當作NFT這種需要永久儲存資料的建議檔案協議 這次使用的IPFS服務網站是https://www.pinata.cloud/ ,進行註冊後就可以免費上傳檔案來產生IPFS文件,不過免費版的會有流量上的限制要注意 當在裡面上傳檔案後(按下那個Upload按鈕然後選擇要上傳的檔案),網頁會給你一串代碼,比如QmUtb97bLLNPYTYPzCPxuLhu3q4kRcMzhtrW7W5xJVgr9B 把這個代碼加上ipfs:// ,就可以形成ipfs網址,也就是ipfs://QmUtb97bLLNPYTYPzCPxuLhu3q4kRcMzhtrW7W5xJVgr9B 不過這個網址沒辦法直接在一般瀏覽器上打開,如果想知道這個代碼對應的檔案內容,則需要加上「https://ipfs.io/ipfs/ 」,也就是 https://ipfs.io/ipfs/QmUtb97bLLNPYTYPzCPxuLhu3q4kRcMzhtrW7W5xJVgr9B 實際打開後我們會發現這個NFT的URI對應的檔案內容為: {"name":"raBit","description":"raBit","image":"https://ipfs.io/ipfs/QmRThPPB1PEsS6tSKdQX4p2UDm8M1EVxDHrBvuTx9dnvFe"} (噪音會把網址https://去掉,所以這裡網址的冒號改成全形) 這個檔案為json檔,基本上就是記錄這個NFT的名字(name)、描述(description)、和圖片網址(image),實際上最重要的只有圖片網址,名字和描述都沒有也是可以顯示在OpenSea上 也就是說如果要製造自己的NFT,首先要上傳圖片,取得圖片網址https://ipfs.io/ipfs/QmRThPPB1PEsS6tSKdQX4p2UDm8M1EVxDHrBvuTx9dnvFe ,之後再建立一個json檔把這個NFT的資料存好,再把這個json檔上傳成ipfs文件,最後用json檔的ipfs網址來進行當作URI鑄造NFT ------------------------------------------ 2.json檔的網址,比如:https://ipfs.io/ipfs/QmUtb97bLLNPYTYPzCPxuLhu3q4kRcMzhtrW7W5xJVgr9B 實際上不使用ipfs網址也可以,只要給一個網址,這個網址會給出json檔的檔案內容就可以 ------------------------------------------ 3.使用Data URI的格式來表示json檔,比如: data:application/json;base64,eyJuYW1lIjoicmFCaXQiLCJkZXNjcmlwdGlvbiI6InJhQml0IiwiaW1hZ2UiOiJodHRwczovL2lwZnMuaW8vaXBmcy9RbVJUaFBQQjFQRXNTNnRTS2RRWDRwMlVEbThNMUVWeERIckJ2dVR4OWRudkZlIn0= 可以試著把上面這串文字複製到瀏覽器的網址輸入列上然後按下enter,會發現瀏覽器會自動顯示出之前的json檔的內容,這個技術叫作Data URI,也就是把資料弄成base64編碼的文字,然後在前面加上「data:application/json;base64,」就能讓瀏覽器視為json檔 把文字轉換成base64編碼可以使用這個網站: https://www.base64encode.org/ 想要解碼的話也可以用這個網站,可以把上面的那串編碼文字丟進去看看: https://www.base64decode.org/ ------------------------------------------ 4.不只使用Data URI的格式來表示json檔,連本身包含的圖片資料也是用Data URI來表示,比如: data:application/json;base64,eyJuYW1lIjoiaWNvbiIsImRlc2NyaXB0aW9uIjoiaWNvbiIsImltYWdlIjoiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDZ0FBQUFvQ0FJQUFBQURuQzg2QUFBR3IwbEVRVlJZaGNXWWYzQlVWeFhIditmZTkvWlhOcHNmbXcwa0lWZ0lBWnFHMGdKU3RZMVd3SlpXclMyMmRPSkluYWwyT25XMFA5VFJEdTNvWUlkT2h4bFI2NHdqVXNmUkdhYlNPaTIyV29RSkZFUVVXeUFwTmlHUU5CUENralUvTm1HelNmYkhlKzhlLzNoaDgzYXorUUg5Zy9QUDIzZnZ1ZWR6enA1ejd6dnZFVFBqZW9pNEx0VHJDZGF1YVJXREdheGdwMGxJMEZVSGNCVmd4YXFqczdXOWFWZFo5TlQ4WkhjNTl3TVlKZitnWHRrYlhIdkQzZCt2WFZJdjV1d0J6VjVjek1sMDhyVTlQM3ZnbzUvTWF1N05tbTJidi81RGo4djFjY0VxRlQremZYT05kWEJXUXdBQkU2WU9OYng2MzkwUHpoejlUR0JsR2RGSFM3MWw0K3dCQUFnNWtkcXBWZ29yWk1WS2prZXN2bFlvRThDN25pOTg2ZmwzWm1CUEM0NE45TWtuS25uWnhLMG9XYVRWZnhWbXlqaXpsOGY2Si9XRTFHOSsySDN2VHZJVWNleGlZdS9YclBCSmU2YVhLaXFlYlF2NEExY0JWcXppajN0RXlKcFFjZ2U4alh2bGtnMGdvUWJheDNjMWNHTElucElMUCtWNzdDakVSSkVhcDM2ZmZPTmJHVHNSV1ZxN3JZL3l4WjFuU0xHS1BGV2VvUUlRd1NWeThaMzJuaEdoNWQ3R1AwSG90a3V1enp5Wm9RTFFGbjNXdWJVcXJLRWpQMi9nZk5uSkEyN1pmbCtnY05nNVF1N0NLeVFBa0RYclpQVmFBQ0JRMGNKc2V4cEF6b0UxMFJNbjJvN05EazZjYTZwTjdNOFE3WXVLUjJDbG5KN0lHKzRBQUdhcnM4bTUzTHJ3VHlBcnZyQUkvUEx0bDAyVkczUXV1T2NQendBZ3Fjc0ZuOVJ2YVpUelY1RFFPQlkyengrWVZGSVd4OEwyei9SN3U1Q09YOEdtVTBkZUFqTkpYWlF0bFZXcnlWdnNnN2s3dnE5ajk4WWNVTmJKWmZaOVdFbHRKRFI5N2VQdURUK0YyODlqMGRSYjN6YmI5cVgrL2lQeUZNbnF0V0JsdHYvVjZyaXlzeE5ENXZtRDJ2SXZBa2ovWTRjYU9Fc2t0QldiWFhkdUpjMWpudDhmUExDVlUxalFjOGpxYjVYbE4rVUhYenA5dUJTZzRtclhIYy9BVXdTQS9PV3VEZHZNemlZVjdVaTgrcEFJM1FoV3FyK05rN0VyVVJyR3lkMHdFeW9lU1ovNE5aZ3BVT20rNjBVcVdnQkFYL09vMlhIUVBQc1dnS0dlMDZIcHdBUEg5cFVTU0MrQTVzME1raThJNlFMQTQwTld6NytRdmYyWWxkVjFSRVUrWUNQQnFUZ0FFYXloUU1YRXRIUnJpejl2dGIvTnpCOTFIQSt0MlpKWm1KWGpvdEV1QU9yeUJhdXpDV3dCQUZ0VzV5Rms0bU1HaUtTTFBFVVVxSkxsTjRyaWhTQlNvLzAyMVhiVldkaHNqRTE0T25EV3ljcUt1RVFNQU9CVVBQbTNwL1ZJczF6ME9SWDVJUDN2WDdFeUFaQ1FWRmloMWQydjNiUkpGSDhDbWdkczhmaWdlZTRkNDczZmNpeHM3MWRPRENFVnR6TUZNMkcydm1uL1NjR3hpMDdXNU1tVmZuZDdxdW5IV1hNazJINzBBdVR5dTlZOXI2LzZCdm1DSU9sVUF5dE9ERnRkaDQzVGY3UzZqN0dRN28wNzlHWDNBR1Q4NXpmcG95OU4rSzE1ZkUrMmlHRHRsSWhGN3RiS25EaWtlejFmZmxtN2RVditCejRKOGdXMStvZTB1Z2RVNzZteEE4OFpoMSt3V3QvZ1pFeEZXbXlxSFFjNVVwQjFWa2VmOXJrS1VybG1TV2dyR3oyYlhyRkxiQlpoeTdwd1BQbmFJendTWnNCWmlmOHJYRno3Yk1ka21NNVZRNm84VHp5RjgxMjNQelVuS2dBU3BIbWdlNWc1cC82SC9OWE8yeXh3ekw5NHFpbFJYaWRLOG96bkY2VlVQTUlqa1N4bkFBQmN0c3c1bUFVT05kdy8xUlQ1Z3BCemJzMEk1QzBCT1hJSkVKaUFwWFVicGdWWHJWcVg1VDFMQUd3a2tDbVFPYkZGcGdadEtnQUlXVks3Zmxxd05xKytsK3N5dDVZTmprYzRQWjYzNDhranJOVGdlUmdKY2xLQmtSVmJ5RnM4TFJoQTlZTmJIYjREQU1kNjFIQTNsSkhwNVdiaUppNmIvLzB6VzJrNHFPVHlWV3g4SVVjekYreGIxZGp2dnkwTFBCWTFXL1p3Y2dTV09XUGNqUFNZY2ZJVnEvdW9NMVlRNmZmc3BFQmxqbmFlbmt1eDZubWlLaGpzVDhIalJoSUF1ZjJ1MjcrbnIzcUVDa0tRYnNqc05vTVZ6SVM2Zk5GNGY3ZHg4bmRJalRoYkVMbXkwYk41ejFRM3AyMzJtaDlic1hSZSs2U2U3aFdWdDJvMTYyWDFiU0pZQzNjaHJEU1A5SnFYTDJMd25IWHBmWFhwTkkvMlFSbFpqVTlnUWNFUE92T2VBZE8ydC9HMGNXajd2ZXZOdzFuYUpLQjd5RCtQQ2l1UUdsWERYV3draVpWOXVOcmJadEo3NlM3NGJyTUlMYzlyZjhhR1BoMC92blA5emZFV0FXczZuVWxEenJ3Q1VYZFoxVGYzeTZyVjArblA5SlloOUlKUFA3d2pGYXcxU2ViMGpqTkw3K3J2VkQ4WG5vR0syVi9hbU5Wd2QvckQxM3ViWHpjR3UwbzQ2ZWEwUVA3YUptQWdkRXZWVjM3aFd0UXdxM056ZUZzRXdJcFRJeXJhT1J4dWpwejVTL0RTQ1o4WlZ5d01na1lrQ0FKTUJTRlgvU2IzWFMrUzdwdmQ0RnpCVHJIU0toWldBMmQ1ZkJoRXBIdkpIWUN2VlBqblVVRm9yZyt4YXdGUGlyM3dLbkx2bEd2N0ZJR1BnN1RsdW4xOCtUK09KL05xbC9VbWlRQUFBQUJKUlU1RXJrSmdnZz09In0= 把上面這一串文字複製到瀏覽器的網址輸入列上然後按下enter,會發現瀏覽器顯示出這樣的json檔內容: {"name":"icon","description":"icon","image":"data:image/png;base64,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"} 然後我們再把當中原本是圖片網址的那一串「data:image/png;base64,...==」文字再複製到瀏覽器的網址輸入列上然後按下enter,會發現瀏覽器顯示出TEST幣的圖標,也就是說我們把圖片的資料檔案也用base64編碼轉換成文字,然後因為是png檔所以在前面加上「data:image/png;base64,」來形成Data URI,把這個圖片Data URI再放到json檔,這個json檔再轉換成Data URI,最後再使用這個URI就能進行NFT的鑄造了 這個方法可以把NFT的圖片資料全部上鏈,不用擔心NFT放在網站上的資料出問題,唯一的問題就是需要花費很多的gas費來把資料上鏈 而要把圖片檔轉換成base64編碼一樣可以使用這個網站: https://www.base64encode.org/ 下面有一個Encode files to Base64 format,可以上傳圖片檔來進行base64編碼 ------------------------------------------ 最後來說一下鑄造NFT網頁中是怎麼做到新增Mumbai鏈資料的,程式碼如下: https://github.com/vcckvv/SmartContract/blob/gh-pages/NFT/index.html async function switchMumbai(){  try{   await window.ethereum.request({method: 'wallet_switchEthereumChain', params: [{ chainId: '0x13881' }],});  }catch(err){   if(err.code == 4902){//has not been added to MetaMask    const chainData = [{     chainId: '0x13881',     chainName: 'Mumbai',     nativeCurrency:{      name: 'MATIC',      symbol: 'MATIC',      decimals: 18     },     rpcUrls: ['https://matic-mumbai.chainstacklabs.com'],     blockExplorerUrls: ['https://mumbai.polygonscan.com/'],    }];    try{     await window.ethereum.request({method: 'wallet_addEthereumChain', params: chainData,});    }catch(err2){     alert(err2.message);    }   }   else{    alert(err.message);   }  } } 這個函數是先試著切換到Mumbai鏈,如果失敗的話就看錯誤碼是否為4902,是的話就代表還沒有這個鏈的資料,於是我們再使用await window.ethereum.request({method: 'wallet_addEthereumChain', params: chainData,});來新增Mumbai鏈的資料,chainData中包含了Mumbai鏈所有需要的資料 ------------------------------------------ 這次的解說就到這裡,下次要來實作NFT去中心化交易所,敬請期待~

@vcckvvOnNoiseApp

今天卜問的是RNDR幣(RenderToken) 卜問RNDR一年之內的發展如何?卜得師九二坤 師九二,在師中,吉,无咎,王三錫命。 [變卦坤]六二,直方大,不習无不利。 RNDR主要目標是建立分散式GPU渲染網路,並從中用代幣換取相應的算力來使用,理想情況下可以比傳統的GPU渲染要花費更低的費用就可以得到夠用的算力,而這裡的變卦坤卦是和紙張、繪畫有關的一卦,GPU渲染也算是繪畫的一種,所以符合其性質 從卦象來看,卜得師卦通常代表就是欠缺經驗而遭遇各種無法處理的麻煩,RNDR可能尚未有足夠純熟的技術來把整個分散式系統漂亮地整合起來,而爻辭「王三錫命」通常代表系統本身不夠穩定,需要時常修復,渲染的效率也不夠好所以也要再三調整,整體來說RNDR的開發團隊這一年要夠努力才能走得較為順利 而從市場表現來看,坤卦是廣納百川之卦,有機會增加使用者或是合作伙伴,但由於其主動性不夠,所以沒人幫的話不會有很大的聲勢,記得之前卜問噪音也得到此卦,大致就跟這個論壇一樣,沒什麼宣傳,只能靠使用者幫忙拉人進來的情況差不多 2022年8月3日1時 ---------------------------- 來回顧一下Terra 2.0的占卜:noise.cash/post/59qrx40twmx9n 最近看到這則新聞: 拋棄Do Kwon!33個項目遷移至舊Luna鏈;Lunc大漲15% https://www.blocktempo.com/33-projects-actively-migrating-to-the-lunaclassic-chain/ 毫不意外地新鏈在發展上遇到了阻礙,不過之前的「利禦寇」的解讀其實不太對,因為Terra 2.0與其說是防禦盜賊的那一方,不如說是當盜賊的那一方,既然如此,那麼「利禦寇」就代表反過來會被人拋棄掉,不會再任Do Kwon宰割

@vcckvvOnNoiseApp

依照預告,這次要實作的是去中心化交易所,沒看過之前智能合約的介紹的話可以先去看一下之前的文章: (1) https://noise.cash/post/jgmg36rhn05wx (2) https://noise.cash/post/r6v7389f5k67z (3) https://noise.cash/post/66xr32vf23r65 (4) https://noise.cash/post/n4qngmpb0n34w (5) https://noise.cash/post/66484zga23r65 (6) https://noise.cash/post/gjv6vj5tkqmw3 先實際操作一遍去中心化交易所看看: https://vcckvv.github.io/SmartContract/TradeCoins/ 其中用到的合約程式碼為: https://goerli.etherscan.io/address/0x756e8B0b1997a0Bc590D2e7525a7f2a54F5ff401#code 1.首先還是一樣,要先有安裝MetaMask的瀏覽器外掛並且開啟起來,然後打開網頁後會要求連結MetaMask錢包、切換到goerli測試鏈 2.接著點選「Faucet」的按鈕切換到水龍頭頁面,如果沒有goerli的ETH幣就點選水龍頭網站連結去取得,也就是https://goerlifaucet.com/ 3.之前沒有取得TEST幣的人點選「Add TEST Asset」按鈕來增加TEST代幣的資料,然後點選「Get TEST」簽署交易來獲得8個TEST代幣 4.這次新增另外一種測試代幣USD,合約程式碼在https://goerli.etherscan.io/address/0xcF364fb0cDBe5D8D4300B8030892E3e09e71D57B#code 上面可以看到,或是https://github.com/vcckvv/SmartContract/blob/gh-pages/TradeCoins/USDToken.sol ,基本上和TEST幣一樣,只是改了一些數字和名字,程式碼則是把之前多個檔案弄成一個檔案 點選「Add USD Asset」按鈕來增加USD代幣的資料,然後點選「Get USD」簽署交易來獲得1000個USD代幣 5.要注意領完幣還沒辦法進行完整的買賣,二種幣都有顯示Allowance的數字,Allowance的值代表你允許這個交易所合約可以自由動用你手中多少個代幣,這樣才有可能讓交易所把你手中的幣轉移到其他人上面以完成交易,如果為了謹慎的話可以只設定這次交易會動用到的金額數目,不過這裡為了省下麻煩,一次把Allowance設到最大,也就是2^256-1 這裡要做的事就是按下「Max TEST Allowance」、「Max USD Allowance」的按鈕後簽署交易,這樣就可以把二種幣的Allowance都調到最大 6.接下來按下「TradeCoins」按鈕回到交易頁面,上面會顯示上次的交易價格,以及排行前7低的賣單價格、排行前7高的買單價格,以及相應的掛單量,下面則是設置買賣單數據的表單 因為goerli鏈區塊產生時間通常大概12~14秒,所以這裡設定每15秒會自動更新一次顯示狀態 7.交易類型有二種:限價單(Limit Order)和市價單(Market Order),點選按鈕就能切換類型 限價單首先設定限定價格,買單要設定最大可接受價格,而賣單則是設定最小可接受價格,再設置給出的代幣數量就可以按下「Buy」、「Sell」按鈕來產生交易單子,之後放到系統中先尋找相配的買賣單進行交易撮合,同樣價格的話會優先找出較早發布的單子,然後盡可能把單子吃掉,直到自己單子的餘額不足以進行交易,或是找不到可以撮合的單子後就在系統中留下買賣單等待其他人的撮合 市價單的運作大致相同,但是吃完符合條件的單子後不會在系統中留下買賣單,而且可以把價格設為0或留空,這樣買單會自動變成價格最大值,賣單則自動變成價格最小值,會一直吃單子直到系統再也沒有單子為止,要注意市價單不會檢查有沒有吃到單子,所以也可能遇到沒吃到單子就結束交易的情況發生 為了方便,在填入價格或給出數量時會計算相應的獲得數量,或是填入獲得數量而計算出需要多少給出數量 在填入數字時會進行檢查,如果不是正常數字,那麼文字會變成紅色代表填錯了,而且代幣都會有限制小數點後的位數數量,一般代幣都是限制小數點後最多18位,而這裡的TEST幣則是小數點後最多2位 8.一旦在系統中留下單子後,可以按下「User」按鈕來到使用者的買賣單頁面,這邊可以看到目前手中有多少單子,以及這些單子內容的數據,按下「Delete Order」按鈕的話就可以把那個單子取消掉,合約系統會把裡面的餘額退給你 9.按下「Orders」按鈕可以看到系統中現在存在的單子,買賣單最多顯示前100名的單子,這個功能只是用來方便除錯 10.按下「Log」按鈕可以看到系統中所有記錄,這個記錄是用event的功能去產生的,之後會提到如何實作,記錄類型分成四種:AddOrder(增加買單或賣單)、DelOrder(取消單子)、TradeOrder(交易撮合)、Transfer(轉移代幣) 11.之後可以按上面的「Trading Pair」下拉選單,可以換成其他的交易對,這個系統預設有三種交易對:「ETH-TEST」、「USD-ETH」、「USD-TEST」,Log記錄或資料狀態都是分開來顯示的 ------------------------------------------ 系統介紹大概就是這樣,下面我們開始來講解程式碼,因為程式碼很多,所以這次就不全部貼上來只是重點式地講解,首先是合約程式碼的部份: https://github.com/vcckvv/SmartContract/blob/gh-pages/TradeCoins/TreeLibrary.sol https://github.com/vcckvv/SmartContract/blob/gh-pages/TradeCoins/TradeCoins.sol ------------------------------------------ 這次的程式會把買賣單進行排序,並要能夠把排名前幾的單子依序列出來,所以會用到紅黑樹的資料結構,不過solidity並沒有內建提供這種資料結構(mapping不能依序列出所有資料),所以這邊是使用別人寫好的紅黑樹程式: https://github.com/bokkypoobah/BokkyPooBahsRedBlackTreeLibrary/blob/master/contracts/BokkyPooBahsRedBlackTreeLibrary.sol 因為裡面沒有讀取節點數量的函數,以及檢查是否為空集合的函數,所以自己有簡單做了修改,其他部份則不變: https://github.com/vcckvv/SmartContract/blob/gh-pages/TradeCoins/TreeLibrary.sol 不過要使用solidity的資料結構必須先了解library和using for的使用方法,以下是簡單的範例: struct Data{  uint value; } library DataLib{  function setValue(Data storage self, uint v) external {   self.value=v;  } } contract Test{  using DataLib for Data;  Data data;  function test() public {   data.setValue(123);//相當於呼叫DataLib中的setValue(data, 123)  } } 個人不太喜歡這種設計,不過目前只能用這種方法來實作資料結構的話也只能習慣它 注意這裡的TreeLibrary只會儲存key,而不會儲存key對應的value,所以如果想使用C++中map那樣的資料結構的話,那麼就要用solidity的mapping去另外儲存映射資料,像是等下會說到的PriceTree 買賣單的資料結構是先以價格為key的紅黑樹PriceTree,然而同一個價格可能會存在多個單子,所以還需要另一個以單子ID為key的紅黑樹OrderTree: struct OrderTree{  TreeLibrary.Tree tree; } struct PriceTree{  TreeLibrary.Tree tree;  mapping(uint => OrderTree) values; } 而在使用上,要判斷是不是沒有資料節點可以用isEmpty(),取得總節點數量可以用getCount(),判斷節點存不存在可以用exists(key),插入新的節點可以用insert(key),刪除則是用remove(key),在PriceTree中取出key相對應的value可以用getValue(key) 如果要從小到大依序取出各個key,則是使用如下的方式: uint key=tree.first();//取得第一個key uint lastKey=tree.last();//取得最後一個key while(true){  ...//處理key的程式碼  if(key==lastKey){   break;  }  key=tree.next(key);//取得下一個key } 而如果要倒過來從大到小依序取出各個key,則是使用如下的方式: uint key=tree.last();//取得最後一個key uint firstKey=tree.first();//取得第一個key while(true){  ...//處理key的程式碼  if(key==firstKey){   break;  }  key=tree.prev(key);//取得上一個key } ------------------------------------------ 這次寫合約程式遇到的最大的麻煩是:Contract code size exceeds 24576 bytes 這個問題是因為合約編譯後的二進位資料限制最多只能有24576 bytes,所以你只要稍微寫大一點的合約程式,就會跳出這個警告,如果無視這個警告,那麼實際發布的時候就很可能會失敗,不過即使沒有這個限制,每個區塊依然會有gas上限,所以發布的合約資料仍然存在上限大小 那麼為了要解決這個問題,我們需要把合約中的程式碼一部份搬到library中實作,比如以下的範例函數: 原本的合約: contract Test{  function f(uint a) public {   (很多的程式碼)  } } 改造後的合約: library TestLib{  function f(uint a, Test test) external {   (很多的程式碼,使用test存取合約中的資料)  } } contract Test{  function f(uint a) public {   TestLib.f(a, this);  } } 不過因為有很多合約資料是不能讓外人隨意設定的,所以我實際在寫時還會用一個布林變數來加一道安全鎖: library TestLib{  function f(uint a, Test test) external {   (很多的程式碼,使用test.data()和test.setData()來存取合約中的資料)  } } contract Test{  uint public data;  bool isLibCall=false;  function setData(uint v) external {   require(isLibCall);//只有TestLib才可以使用這個函數   data=v;  }  function f(uint a) public {   isLibCall=true;//解鎖   TestLib.f(a, this);   isLibCall=false;//加鎖  } } 注意這個方法要很確定TestLib.f()不會呼叫任何未知內容的外部合約函數,否則就等同把重大的修改權限交給其他人來使用 這次把合約TradeCoins的程式碼拆出一部份到TradeCoinsLib基本上就是按照這個架構在寫 ------------------------------------------ 第二個遇到的大問題是Stack Too Deep,意思就是EVM運行的Stack很小,所以只要在函數中多塞點local變數就會出現這個錯誤,這個時候就只能產生另外一個函數,呼叫這個函數來把一些需要local變數的操作移到其他的地方,或是使用struct把多個local變數包成一個local變數來操作 這次有用到的部份是Trade這個event(後面會解釋什麼是event),如果直接emit event的話就會跳出這個錯誤,所以我把它用另外一個函數eventTrade包裝起來,而且輸入參數是使用struct的TradeData(後面會說到),一樣把多個變數包成一個變數: event Trade(uint time, TradeType tradeType,  address indexed buyUser, address indexed sellUser, uint32 indexed pairID, uint price,  uint buyValue, uint sellValue, uint orderID, bool isEndOrder); function eventTrade(TradeData memory data) internal {  emit Trade(block.timestamp, data.tradeType,   data.buyUser, data.sellUser, data.pairID, data.price,   data.buyValue, data.sellValue, data.orderID, data.isEndOrder); } ------------------------------------------ 還沒介紹過event,所以接下來講解一下,以下是範例: contract Test{  event msg(uint indexed key1, uint indexed key2, string memory message);//用indexed來設定key變數  function f() public {   emit msg(1, 2, "message");  } } 一旦我們執行Test中f()這個函數,就會在鏈上留下一段記錄msg(1, 2, "message"),但這個記錄無法被合約存取,因為不被視為儲存的storage資料,不過我們可以在javascript中使用filter和queryFilter函數把這些資料讀取出來: let filter = testContract.filters.msg(); let data = await testContract.queryFilter(filter, startBlockNum, endBlockNum); 假設我們有執行過一次f(),並且資料是在區塊startBlockNum~endBlockNum之間,則我們會讀到data.length==1,並且可以用data[0].args[0]、data[0].args[1]、data[0].args[2]來各別取出key1、key2、message的資料 如果我們要指定某些key變數用來過濾搜尋的話,則可以這樣設定filter: let filter = testContract.filters.msg(key1);//符合key1就好 let filter = testContract.filters.msg(key1, key2);//符合key1和key2 let filter = testContract.filters.msg(null, key2);//符合key2就好 另外要注意indexed變數最多只能設3個,也就是只有三個變數能被當作key event的方便之處在於消耗gas會比一般的儲存資料要便宜很多,而且很適合用來除錯,可以檢視一些重要資料的狀態變化 這次為了方便log頁面一次把所有種類的記錄都顯示出來,所以把四種記錄都做成同一個event,然後用enum設計出四種種類的名字(AddOrder, DelOrder, TradeOrder, Transfer),而實際上在讀取tradeType的時候會是對應0~3的數字,然後有些欄位的變數在某些種類中不會被用到,有些變數則在某些種類中有別的意義: enum TradeType{  AddOrder, DelOrder, TradeOrder, Transfer } struct TradeData{  TradeType tradeType;  address buyUser;//Transfer: fromAddr  address sellUser;//Transfer: toAddr  uint32 pairID;  uint price;  uint buyValue;//Transfer: token1Value  uint sellValue;//Transfer: token2Value  uint orderID;  bool isEndOrder; } ------------------------------------------ 補上之前沒講到的修飾詞storage,以下面程式為例: Order memory order1=orderMap[id]; Order storage order2=orderMap[id]; order1是複製過來暫時的資料,所以對其進行寫入不會改到鏈上的資料 order2則是指向鏈上的資料,所以對其進行寫入會改到鏈上的資料,另外進行存取時所花費的gas費也會比較貴,所以原則上處理過程中盡量使用memory變數 另外像數值型態的區域變數,如uint、address、bool,都是不能加上修飾詞storage、memory,預設上都是memory存取,只有參考型態的區域變數,像是struct資料、mapping、array才可以使用storage去存取 ------------------------------------------ 這次有用到二種特別的變數修飾詞:immutable和constant address immutable founderAddr; uint constant public cnPriceStd=10**18;//10**18等同10的18次方 immutable代表這個變數在經過一開始constructor()執行後就不再改變數值,設定這個修飾詞可以使這個變數之後的讀取gas費都變少,就如同被當作不變的常數看待 constant就代表這個數是不變的常數,再加上public代表這個變數可以被外部讀取,不過外部讀取時要以函數的形式進行呼叫,也就是cnPriceStd() ------------------------------------------ 這次有用到另外三種函數修飾詞:internal、private、external internal代表這個函數只能被內部呼叫、不能被外部呼叫,不過可以進行繼承,private也是一樣只能被內部呼叫,不過不能被繼承 external則是反過來只能被外部呼叫、不能被內部呼叫,看資料說設定這樣的函數可以比全設成public函數要稍微省一些gas費 另外要注意,在library中的internal函數如果被contract引用,則程式碼資料會算在contract之中,所以要用public或external才不會讓contract變肥大 ------------------------------------------ 這次在吃單的過程中傳送原生代幣的方法是使用send()函數,而不是之前提到的transfer()函數,如下: function sendOrgCoin(address addr, uint value) internal {  if(payable(addr).send(value)==false){   //遇到特殊合約可能出錯,這裡跳過錯誤,避免單子沒辦法被吃掉而卡住  } } send()和transfer()的差別在於send()出錯的話會回傳、繼續執行後續操作,而transfer()則是讓整個交易無效、後面的操作都無法執行 那麼什麼情況會出現傳送原生代幣錯誤呢,原因在於其他合約也可以成為交易者,並且呼叫這個合約的交易函數進行交易,但是傳送原生代幣給交易者合約時可以觸發那個合約的fallback函數,如下: contract FailSend {  fallback() external payable {   revert();  } } (在0.6.X之前的編譯器版本可以用沒有名字的函數當作fallback函數,不過現在新版就是寫成這樣) fallback函數會在二種情況下觸發,第一種是呼叫合約的函數時,但是其函數名字不符合現有函數的任一個,第二種是傳原生代幣給這個合約的位址,而上述的合約會使得任何傳送代幣的動作都會失敗,因為都會執行到revert() 為了避免遇到這種情況,所以我們這裡選擇使用send()來跳過錯誤,而不是用transfer()讓整個吃單系統卡住 ------------------------------------------ 雖然合約程式碼看起來很多,不過如果上面這些新講的東西都懂,然後也懂得基本的系統運作的話,那麼其他的部份閱讀起來應該都沒有問題,這裡就不再詳細解說裡面的細節,來談一下發布時會遇到的情況: 這次主要發布的合約是TradeCoins,因為裡面用到3個library:PriceTreeLib、OrderTreeLib、TradeCoinsLib,這些library要在TradeCoins發布之前都先發布出去,不過幸好remix可以幫我們依序發布並自動做好連結library,所以我們在發布的時候一樣只要選擇TradeCoins來發布,然後就會依序先把三個library發布,最後再發布出TradeCoins,過程就是簽署完等到上鏈後再簽署下一筆交易 另外,如果要在etherscan中進行Verify and Publish,那麼最好先把多個檔案的內容塞成一個檔案,然後在輸入程式碼的底下有一項Contract Library Address,在這裡輸入要連結的三個library和名字和發布位址,如果沒這麼做就會驗證失敗,比如這次的發布位址是: OrderTreeLib 0xD94631D7f498cE63a3CC843a3A8302569E47c4ff PriceTreeLib 0xFFC56B04A7D67fB0e565d9e938aba14c496C6060 TradeCoinsLib 0x6344F360E4AE1bcF461A71843CbF92540a9Da023 ------------------------------------------ 接下來轉移到網頁程式碼的解說部份: https://github.com/vcckvv/SmartContract/blob/gh-pages/TradeCoins/index.html 網頁的部份一樣不談論JavaScript和HTML的操作,之前有說過的web3的部份也不用多說,主要談這次有用到的新東西: 這段程式碼可以讀取到現在最新的區塊數 let nowBlockNum = await provider.getBlockNumber(); 這段程式碼可以讀取到特定區塊的時間(timestamp),然後再用我寫好的timestampToStr函數去把它轉成字串 timestampToStr((await provider.getBlock(startBlockNum) ).timestamp); ------------------------------------------ 在ethers函數庫中有提供ethers.utils.formatUnits()和ethers.utils.parseUnits()的函數來進行數字字串和BigNumber之間的轉換,比如: ethers.utils.formatUnits("1000000000000000000", 18);//產生1.0,相當於把數字除於10^18 ethers.utils.parseUnits("1.0", 18);//產生值為1000000000000000000的BigNumber,相當於把數字乘於10^18 實際使用上有些限制,所以我又另外寫了一個formatUnits()函數,可以進行正數或負數的位數轉換 而ethers函數庫的BigNumber可以做一些整數加減乘除、比較大小的運算,完整用法可以參考ethers的網頁說明: https://docs.ethers.io/v5/api/utils/bignumber/ ------------------------------------------ 其他的部份感覺就不用特別詳細解說了,有問題的話就另外留言問吧 這次難度好像有點跳太高了,不過如果只是單純講解solidity的各種語法還蠻無聊的,試著建立一個系統然後從中學習需要的東西,對我來說還是比較有趣一些 寫完後回顧了一下這個掛單簿系統,其實覺得掛單的gas費太貴,並不是適合實際上線的系統,所以一般才會採用AMM(Automated Market Maker,自動化做市商)的系統設計,AMM雖然也有缺點但好處就是交易gas費沒那麼貴,如果要做出有實用性的掛單簿系統可能要學dydx項目那樣在鏈下進行交易撮合,之後再把結果放到鏈上,不過那樣系統就太複雜了 想說的差不多就是這樣,這次就講解到這裡,下次來談談怎麼製作NFT合約

@vcckvvOnNoiseApp

今天卜問的是區塊鏈身份認證系統Civic(CVC幣) 卜問Civic一年之內的發展如何?卜得家人六二小畜 家人六二,无攸遂,在中饋,貞吉。 [變卦小畜]九二,牽復,吉。 一般而言,每當要註冊一家新的交易所時往往就需要再次進行KYC身份驗證,很顯然這相當麻煩、浪費時間而且可能會有資訊洩露問題,而Civic這個系統的目標就是透過區塊鏈技術來讓身份驗證一次性的解決,這樣註冊新帳號時就不用再輸入一堆資料,直接讓網站連上Civic的系統就好,而這種讓管理方便的結果正好是管理之卦家人卦的性質 從卦象來看,這一卦主要專心在內務上,沒有任何其他外在的才能可以發揮,由此可以見得Civic開發團隊就只想要把身份驗證相關的功能做好,這一年應該是沒有其他的大計畫,雖然沒突出的表現,不過相對其他野心很大、什麼都想做而把事情搞砸的項目算好很多了 市場表現上應該就是表現平平,不過因為變卦是在內畜養的小畜卦,所以多少還是可以增加相當數量的使用者 2022年8月1日1時 ------------------------- 來回顧一下Meta公司元宇宙計畫的占卜結果:https://noise.cash/post/767kx0gdj795p 最近看到這則新聞: Meta VR 部門第二季虧 28 億鎂!FTC 起訴違法收購、控欲壟斷元宇宙市場 https://www.blocktempo.com/ftc-files-to-block-meta-from-buying-vr-fitness-studio-within/ 如預測一樣變成一場災難,不只二季都大虧錢,還要被起訴壟斷市場,照這樣下去元宇宙計畫應該早晚會被捨棄掉

@vcckvvOnNoiseApp

今天卜問的是去中心化組織Constitution DAO(PEOPLE幣) 卜問Constitution DAO一年之內的發展如何?卜得同人九三无妄 同人九三,伏戎于莽,升其高陵,三歲不興。 [變卦无妄]六三,无妄之災,或繫之牛,行人之得,邑人之災。 Constitution DAO當初被建立的目的是為了要籌集資金,用來買下蘇富比公開拍賣的美國憲法副本,那時在短短幾天的時間就籌到了4000多萬美金,不過最終並沒有成功得標,美國憲法副本被某個人以更高的價格標下,在失去當初的目標後Constitution DAO決定無限期讓捐贈者退款,並發行治理代幣PEOPLE,當初捐贈的錢包帳號都能獲得相應數量的代幣,原本這代幣是沒有價值的,不過在社群的人氣下變成了類似迷因幣之類的東西而有了價值,而這個故事正好符合同人「眾人會合追求某種難以攻下的目標」的性質,同時變卦无妄卦也符合其中的「意外之災」、「意外之福」的性質 從爻辭「伏戎于莽,升其高陵,三歲不興」來看,這一年雖然有些計畫在準備,但實行上都不容易,需要花費多年時間來完成,去中心化組織在行動或管理上本來就不嚴謹,所以效率問題很難解決,不過這一卦更麻煩的地方在於變卦爻辭「无妄之災,或繫之牛,行人之得,邑人之災」所示的意外災難,看起來可能會被進行攻擊而遭受損失,這樣的話就更難實現其想要達成的計畫 從市場表現來看,「升其高陵」可能代表其價格在一段時間內會上漲,但因為是會遇到意外的一卦,所以無法期待會一直穩定保持在高位的價格 2022年7月31日3時 ----------------------------- 來回顧一下ETH、ETC的占卜結果: https://noise.cash/post/4xj7xjgawp4rg https://noise.cash/post/w86km4pdmpkgr 最近看到這篇ETH合併的講解: ETH 合併之後價格表現到底會如何? 專業人士給出他的答案 https://zombit.info/what-will-happen-after-eth-merged/ 之前認為ETH卦象中的「同人于宗」是指有其他貨幣的競爭者,當時還不確定ETH合併會不會又延期,不過現在來看應該是指ETH把PoW轉換成PoS共識機制的問題,「同人于宗」往往代表存在著派系之間的鬥爭,這裡PoW和PoS各成一派,而轉換成PoS就是把PoW那一派用難度炸彈去打倒然後取代掉 從上面那一篇講解來說,最糟糕的情況就是合併失敗,而且會把ETH網路分成PoW派和PoS派,從卦象來看這種事是有可能會發生的,而且會間接使ETH整個生態體系都受到波及,到時候就會看到飛龍從空中墜落到地面(也就是「見龍在田」),這點其實在其他ETH生態系的占卜結果上都有發現到其可能性,所以如果有ETH相關資產的人都建議在9月合併之前避險一下,確定合併沒問題後再把資產移回來 至於ETC則是最近看到這二篇消息: ETC暴漲超43%!礦工怕 POW 終結,V 神回應「以太坊經典非常好」 https://www.blocktempo.com/vitalik-said-etc-was-good-and-etc-rise-40-in-a-day/ ETC 7月飆漲 184%!市場猜測以太坊「合併」將促礦工遷移,與 MATIC、UNI 齊領復甦 https://www.blocktempo.com/etc-has-added-184-on-july-matic-and-uni-surge-as-july-brings-relief-to-crypto-market/ 以個人觀點來看,ETC的基礎和應用還是不夠,不過因為有V神幫忙加持,再加上如果ETH合併失敗的話,可能會反過來讓ETC得利,所以卦象中的「城復于隍,勿用師,自邑告命,貞吝」糟糕亂象也可能是指ETH的問題,而ETC本身則是可能可以繼續一飛沖天

@vcckvvOnNoiseApp

今天卜問的是BTCST幣(Bitcoin Standard Hashrate Token) 卜問BTCST一年之內的發展如何?卜得小畜上九需 小畜上九,既雨既處,尚得載,婦貞厲。月幾望,君子征凶。 [變卦需]上六,入于穴,有不速之客三人來,敬之,終吉。 BTCST幣是由比特幣算力抵押的代幣,也就是說每一顆BTCST背後都有 0.1 TH/s 的真實算力作為抵押,這個幣的玩法大概是這樣:如果有一個礦工短期內需要資金,但他不想賣出手中的礦機或是比特幣,那麼他就可以抵押自己手上的算力來取得BTCST,並且把它賣掉來獲得資金,而擁有BTCST幣的人在系統的運作下可以獲得那份算力挖到的比特幣 而其中代幣是虛擬的,算力是真實的,這樣「連結虛擬和現實」的性質正好符合變卦需卦 當然這個系統有一個很明顯的風險,那就是礦機可能壞掉或故障,所以不能保證一顆BTCST一定固定有0.1 TH/s 的真實算力,雖然開發團隊設置了25週鎖倉期來降低風險,但整體的問題並沒有解決,以這個卦象來看,可說是隨時都可能會遇到重傷而無法前進的樣子(「婦貞厲。月幾望,君子征凶」),雖然可能暗藏某些盟友的幫助(「有不速之客三人來,敬之,終吉」),但整體來說並不是能長期保持穩定的項目 2022年7月30日1時 ------------------------------ 來回顧一下Harmony的占卜結果:https://noise.cash/post/jpz3jw0dn05wx 之前看到這則新聞: 1億鎂跨鏈橋駭案》Harmony 發佈補償提案:將硬分叉增加 ONE 幣供應 https://www.blocktempo.com/harmony-reimbursement-proposal-for-horizon-incident/ 雖然之前沒特別指出,爻辭的「或擊之」其實也具有「可能被攻擊」的性質,不過這個卦的重點還是在「莫益之」上,Harmony受攻擊反而用增加 ONE 幣供應的方式來進行補償,這種糟糕的做法也難怪用戶會產生反彈,而爻辭「莫益之,或擊之」正好體現了其過度增益而招來批評的情況