前情介紹:
?????? SC錢(qián)包有兩類(lèi)方式劲适,一類(lèi)是帶有UI界面的Sia-UI, 有界面操作楷掉;一類(lèi)是Sia Daemon服務(wù),只在終端里面操作霞势。而對(duì)于大部分SC錢(qián)包開(kāi)發(fā)者來(lái)說(shuō)烹植,一般只用Sia Daemon服務(wù)。該后臺(tái)服務(wù)主要是siad為后臺(tái)server愕贡,siac為cmd模式的client草雕。而對(duì)于siad服務(wù)啟動(dòng)的選項(xiàng)有如下很多選項(xiàng):
對(duì)于其中Flag的選項(xiàng)中--authenticate-api, --temp-password 與API密碼配置有關(guān),那么該怎么設(shè)置api password呢固以?帶著這個(gè)問(wèn)題墩虹,我查看了sia的源碼。而看過(guò)源碼后憨琳,才真正搞清楚其配置方式和得以一窺siad后臺(tái)服務(wù)啟動(dòng)的過(guò)程诫钓。
源碼分析:
首先,從官網(wǎng)上點(diǎn)擊開(kāi)發(fā)者文檔的鏈接栽渴,即下面這個(gè):
進(jìn)入后尖坤,往上一層,即進(jìn)入該開(kāi)源項(xiàng)目的代碼目錄闲擦,其中siad慢味,siac對(duì)應(yīng)的代碼就在cmd目錄下场梆,build涉及的一些版本號(hào),系統(tǒng)路徑設(shè)置等纯路。
點(diǎn)擊siad或油,即可進(jìn)入一睹siad源碼了。這里主要三兩個(gè)文件驰唬,main.go顶岸,server.go和daemon.go。啟動(dòng)main在main.go文件中實(shí)現(xiàn)叫编,其中數(shù)據(jù)結(jié)構(gòu)Config定義了siad支持的各種輸入?yún)?shù)辖佣,這個(gè)和前面輸出的各個(gè)選項(xiàng)對(duì)應(yīng)。
打開(kāi)daemon.go文件搓逾,其中最開(kāi)始執(zhí)行的函數(shù)是startDaemonCmd卷谈,其內(nèi)部調(diào)用startDaemon。
而上面紅框內(nèi)容就是進(jìn)行API 密碼設(shè)置的邏輯霞篡。這段簡(jiǎn)單來(lái)說(shuō)世蔗,就是首先檢查標(biāo)志AuthenticateAPI是否為true,這個(gè)默認(rèn)就是true朗兵,對(duì)應(yīng)終端顯示的--authenticate-api 選項(xiàng)污淋,顯然,這個(gè)默認(rèn)值明確提示是true余掖。所以會(huì)紅框部分邏輯必走寸爆。那么下一步,檢查有無(wú)輸入--temp-password選項(xiàng)盐欺,如果有而昨,走函數(shù)passwordPrompt,彈出提示:Enter API password:由用戶輸入找田,否則,則走函數(shù)apiPassword着憨。如果不輸入temp password墩衙,則看apiPassword,分析如圖甲抖。
那么漆改,缺省目錄文件又是怎么確定的呢?上面看出准谚,傳入的是build.DefaultSiaDir()函數(shù)指定挫剑。這個(gè)那就是在build模塊的DefaultSiaDir() 函數(shù)了。找到在appdata.go文件中柱衔。如下樊破∮淅猓可以看出,Linux:$HOME/.sia目錄下apipassword文件哲戚。
由此奔滑,我們可知在不輸入temp-password選項(xiàng)時(shí),程序的api password決策路徑為:
1. 環(huán)境變量SIA_API_PASSWORD值顺少;
2.缺省目錄下的apipassword文件里面的內(nèi)容朋其;
3.系統(tǒng)自動(dòng)生成一個(gè)。且下次自動(dòng)重用之脆炎。(系統(tǒng)會(huì)給出路徑提示梅猿。)
如果輸入了temp password選項(xiàng),則:
從標(biāo)準(zhǔn)終端stdin輸入秒裕。
自此袱蚓,API password和temp password的關(guān)聯(lián)關(guān)系得以清晰。此外簇爆,打開(kāi)server.go文件癞松,發(fā)現(xiàn),其load各個(gè)模塊的函數(shù):
中入蛆,在所有模塊加載完畢后响蓉,有一段代碼:
這說(shuō)明系統(tǒng)會(huì)從環(huán)境變量SIA_WALLET_PASSWORD中獲取對(duì)應(yīng)的wallet密碼自動(dòng)解鎖錢(qián)包,而無(wú)需用戶自己手動(dòng)解鎖了哨毁。而之前枫甲,服務(wù)啟動(dòng)后,錢(qián)包默認(rèn)是鎖定狀態(tài)扼褪,需要用戶手工解鎖∠牖茫現(xiàn)在只要配置一個(gè)環(huán)境變量,即可解鎖话浇,完全不需要人工參與了脏毯,這對(duì)我們開(kāi)發(fā)者來(lái)說(shuō)是非常方便的。