狼愛上貍

          我胡漢三又回來了

          2019年10月23日 #

          centos8 安裝 docker

          https://www.cnblogs.com/zbseoag/p/11736006.html

          posted @ 2020-05-06 12:57 狼愛上貍 閱讀(400) | 評論 (3)編輯 收藏

          firefox 翻譯插件

          作者:AsReader
          鏈接:https://www.zhihu.com/question/64845885/answer/1122345134
          來源:知乎

          posted @ 2020-04-18 09:45 狼愛上貍 閱讀(295) | 評論 (0)編輯 收藏

          鼠標(biāo)在Solaris 11虛擬機(jī)上不起作用

          https://kb.vmware.com/s/article/2040498

          posted @ 2020-03-22 08:22 狼愛上貍 閱讀(300) | 評論 (0)編輯 收藏

          solaris11.4

          https://www.oracle.com/solaris/solaris11/downloads/solaris11-vm-templates-downloads.html

          posted @ 2020-03-21 21:43 狼愛上貍 閱讀(248) | 評論 (0)編輯 收藏

          solaris11.3下載

          http://download.oracle.com/otn/solaris/11_3/sol-11_3-vbox.ova

          posted @ 2020-03-20 21:52 狼愛上貍 閱讀(566) | 評論 (0)編輯 收藏

          linux(centos7)安裝jdk8--附帶oracle賬號

          https://www.cnblogs.com/chaos-li/p/11970713.html

          posted @ 2020-03-20 18:53 狼愛上貍 閱讀(192) | 評論 (0)編輯 收藏

          Flutter 常用框架

          https://www.jianshu.com/p/7403371162c1

          posted @ 2020-03-19 17:10 狼愛上貍 閱讀(171) | 評論 (0)編輯 收藏

          IPFS參考網(wǎng)關(guān)

          https://ipfs.github.io/public-gateway-checker/

          posted @ 2020-03-14 11:01 狼愛上貍 閱讀(480) | 評論 (0)編輯 收藏

          安裝配置Shibboleth

          0.前言

          本文介紹了如何搭建Shibboleth,實(shí)現(xiàn)Shibboleth+Ldap的SSO解決方案

          1.什么是Shibboleth

          Shibboleth是一個基于標(biāo)準(zhǔn)的,實(shí)現(xiàn)組織內(nèi)部或跨組織的網(wǎng)頁單點(diǎn)登錄的開源軟件包。它允許站點(diǎn)為處于私有保護(hù)方式下的受保護(hù)的在線資源做出被通知的認(rèn)證決定。

          Shibboleth軟件工具廣泛使用聯(lián)合的身份標(biāo)準(zhǔn),主要是OASIS安全聲稱標(biāo)記語言(SAML),來提供一個聯(lián)合單點(diǎn)登錄和屬性交換框架。一個用戶用他的組織的證書認(rèn)證,組織(或IdP)傳送最少的必要的身份信息給SP實(shí)現(xiàn)認(rèn)證決定。Shibboleth也提供擴(kuò)展的隱私功能,允許一個用戶和他們的主站點(diǎn)來控制釋放給每一個應(yīng)用的屬性。

          Shibboleth項(xiàng)目作為一個Internet2中間件活動啟動于2000年,這年晚些時候該項(xiàng)目和OASIS SAML工作組的工作相聯(lián)系。Shibboleth1.0 于2003年發(fā)布,并快速被全世界的研究和教育機(jī)構(gòu)使用。隨著2005年SAML2.0的發(fā)布,2006年Shibboleth2.0也發(fā)布,SAML標(biāo)準(zhǔn)升級到包含所有的多邊,由Shibboleth首創(chuàng)的元數(shù)據(jù)驅(qū)動方法。

          Shibboleth作為開源軟件開發(fā),在Apache 軟件許可證下發(fā)布。關(guān)于個別部件的更多信息可以在產(chǎn)品頁面看到。

          2.安裝Shibboleth Identity Provider v3.2.1

          1. 切換成root
          sudo su 

          2.下載Shibboleth Identity Provider v3.2.1

          wget http://shibboleth.net/downloads/identity-provider/latest/shibboleth-identity-provider-3.2.1.tar.gz tar -xzvf shibboleth-identity-provider-3.2.1.tar.gz cd shibboleth-identity-provider-3.2.1

          3.安裝Shibboleth Idenentity Provider:

          sh-3.2# ./install.sh  Source (Distribution) Directory (press <enter> to accept default): [/Users/zhaoyu.zhaoyu/Applications/shibboleth-identity-provider-3.3.2]  Installation Directory: [/opt/shibboleth-idp]  Hostname: [localhost.localdomain] testdomain.com SAML EntityID: [https://testdomain.com/idp/shibboleth]  Attribute Scope: [localdomain]  Backchannel PKCS12 Password:  Re-enter password:  Cookie Encryption Key Password:  Re-enter password:  Warning: /opt/shibboleth-idp/bin does not exist. Warning: /opt/shibboleth-idp/dist does not exist. Warning: /opt/shibboleth-idp/doc does not exist. Warning: /opt/shibboleth-idp/system does not exist. Warning: /opt/shibboleth-idp/webapp does not exist. Generating Signing Key, CN = testdomain.com URI = https://testdomain.com/idp/shibboleth ... ...done Creating Encryption Key, CN = testdomain.com URI = https://testdomain.com/idp/shibboleth ... ...done Creating Backchannel keystore, CN = testdomain.com URI = https://testdomain.com/idp/shibboleth ... ...done Creating cookie encryption key files... ...done Rebuilding /opt/shibboleth-idp/war/idp.war ... ...done  BUILD SUCCESSFUL Total time: 1 minute 14 seconds 

          (from now "{idp.home}" == /opt/shibboleth-idp/)
          4.導(dǎo)入 JST library (status界面會用到):

          cd /opt/shibboleth-idp/edit-webapp/WEB-INF/lib wget https://build.shibboleth.net/nexus/service/local/repositories/thirdparty/content/javax/servlet/jstl/1.2/jstl-1.2.jar cd /opt/shibboleth-idp/bin ./build.sh -Didp.target.dir=/opt/shibboleth-idp

          3.安裝指引

          3.1 安裝apache tomcat 8

          1.切換成root

          sudo su -

          2.修改tomcat的%{CATALINA_HOME}/conf/server.xml
          將8080端口和8443端口的地方分別改成80和443

           <Connector port="80" protocol="HTTP/1.1"                                                                                                    connectionTimeout="20000"                redirectPort="443" />

          3.生成證書文件

          [chengxu@local]keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "./tomcat.keystore" 輸入密鑰庫口令:   再次輸入新口令:  您的名字與姓氏是什么? [Unknown]:  cheng 您的組織單位名稱是什么? [Unknown]:  testdomain.com 您的組織名稱是什么? [Unknown]:  testdomain.com 您所在的城市或區(qū)域名稱是什么? [Unknown]:   您所在的省/市/自治區(qū)名稱是什么? [Unknown]:   該單位的雙字母國家/地區(qū)代碼是什么? [Unknown]:   CN=cheng, OU=testdomain.com, O=testdomain.com, L=Unknown, ST=Unknown, C=Unknown是否正確? []:    輸入 <tomcat> 的密鑰口令   (如果和密鑰庫口令相同, 按回車):   再次輸入新口令:  [chengxu@local]

          4.修改tomcat的%{CATALINA_HOME}/conf/server.xml,使支持https協(xié)議

          <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"                 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"                 clientAuth="false" sslProtocol="TLS"                  keystoreFile="/Users/chengxu/Shibboleth/tomcat/tomcat.keystore"                    keystorePass="xxx"/> 

          5.發(fā)布Idp Web Application到Tomcat 8 container

          vim %{CATALINA_HOME}/conf/Catalina/localhost/idp.xml
          <Context docBase="/opt/shibboleth-idp/war/idp.war"          privileged="true"          antiResourceLocking="false"          swallowOutput="true"/>

          4.配置host

          vim /etc/host 127.0.0.1 testdomain.com

          5.重啟tomcat
          %{CATALINA_HOME}/bin/catalina.sh stop
          %{CATALINA_HOME}/bin/catalina.sh start
          6.檢測是否服務(wù)啟動正常
          訪問https://testdomain/idp/status
          或者/opt/shibboleth-idp/bin; ./status.sh

          3.2 配置shibboleth連接ldap

          編輯修改ldap.properties

          vim /opt/shibboleth/conf/ldap.properties  idp.authn.LDAP.authenticator = bindSearchAuthenticator idp.authn.LDAP.ldapURL = ldap://ldap.example.it:389 idp.authn.LDAP.useStartTLS = false idp.authn.LDAP.useSSL = false idp.authn.LDAP.baseDN = cn=Users,dc=example,dc=org idp.authn.LDAP.userFilter = (uid={user}) idp.authn.LDAP.bindDN = cn=admin,cn=Users,dc=example,dc=org idp.authn.LDAP.bindDNCredential = ###LDAP ADMIN PASSWORD###

          6.修改shibboleth ldap配置

          vim /opt/shibboleth/conf/services.xml  把 <value>%{idp.home}/conf/attribute-resolver.xml</value> 改為 <value>%{idp.home}/conf/attribute-resolver-full.xml</value>
          vim /opt/shibboleth-idp/conf/attribute-resolver-full.xml  注釋掉下列代碼,如果已經(jīng)注釋掉了就不動了(有些版本已經(jīng)注釋了)  <!-- <dc:StartTLSTrustCredential id="LDAPtoIdPCredential" xsi:type="sec:X509ResourceBacked">   <sec:Certificate>%     {idp.attribute.resolver.LDAP.trustCertificates}</sec:Certificate>   </dc:StartTLSTrustCredential> -->

          重啟tomcat

          7.獲取idp metadata.xml
          https://testdomain.com/idp/shibboleth
          注意metadata.xml文件中的validUntil屬性,如果過期了則修改為未來的某個時間點(diǎn)

          4.小結(jié)

          至此我們完成了Shibboleth與LDAP集成的安裝過程

          下篇: 實(shí)現(xiàn)Shibboleth+Ldap到阿里云的單點(diǎn)登錄

          來自https://yq.aliyun.com/articles/350531?tdsourcetag=s_pcqq_aiomsg&do=login&accounttraceid=87b0f203-5d81-4cb7-a986-49615e3962e2&do=login&do=login

          posted @ 2020-03-09 18:20 狼愛上貍 閱讀(959) | 評論 (0)編輯 收藏

          Shibboleth IDP 的安裝和部署配置步驟

          https://blog.csdn.net/wwwcomy/article/details/49098961

          https://www.iteye.com/blog/lhy5201314-1171267

          posted @ 2020-03-08 23:21 狼愛上貍| 編輯 收藏

          Android Studio 以逍遙模擬器為模擬器

          在C盤根目錄下建立以下批處理文件:

          c:
          cd C:\Program Files\Microvirt\MEmu
          adb start-server
          c:
          cd C:\Android\Sdk\platform-tools
          adb  connect 127.0.0.1:21503
          cd\

          在命令提示符(管理員)下運(yùn)行它就OK了。

          posted @ 2020-03-07 19:08 狼愛上貍 閱讀(321) | 評論 (0)編輯 收藏

          Android SDK搬家

          flutter config --android-sdk 自己的android sdk路徑Android SDK默認(rèn)的安裝地址為:
          C:\Users\Administrator\AppData\Local\Android\SDK
          現(xiàn)需要把它搬到 C:\Android\Sdk
          操作如下:
          1.把C:\Users\Administrator\AppData\Local\Android\SDK剪切復(fù)制到C:\Android\Sdk;
          2.在FLutter sdk 目錄下運(yùn)行如下命令:
          flutter config --android-sdk C:\Android\Sdk
          3.在環(huán)境變量中把ANDROID_HOME改為C:\Android\Sdk;
          重啟,這樣就OK了。

          posted @ 2020-03-07 18:59 狼愛上貍 閱讀(217) | 評論 (0)編輯 收藏

          Android-X86網(wǎng)絡(luò)設(shè)置

          https://blog.csdn.net/weixin_30598225/article/details/98351753?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

          posted @ 2020-03-03 18:43 狼愛上貍 閱讀(776) | 評論 (0)編輯 收藏

          VM安裝Android

          https://baijiahao.baidu.com/s?id=1630789160989369444&wfr=spider&for=pc

          安裝后還是無法聯(lián)網(wǎng)的,需要以下步驟才能聯(lián)網(wǎng):
          設(shè)置--》網(wǎng)絡(luò)和互聯(lián)網(wǎng)--》私人DNS -->把自動改為關(guān)閉
          就能上網(wǎng)了。

          posted @ 2020-03-03 16:20 狼愛上貍 閱讀(126) | 評論 (0)編輯 收藏

          【linux】CentOS 查看系統(tǒng)時間,修改時區(qū)

          【linux】CentOS 查看系統(tǒng)時間,修改時區(qū)

           

           

          ===============CentOS 7.6================

          1.查看系統(tǒng)時間

          date

           

          查看當(dāng)前系統(tǒng)時間以及時區(qū)
          結(jié)果是:

          Mon Jul 8 09:23:31 UTC 2019

           

           

          2.更改系統(tǒng)時間時區(qū)

          timedatectl set-timezone Asia/Shanghai

           

          3.再次查看

          date

          結(jié)果是:

          Mon Jul  8 17:25:28 CST 2019

           

           

          4.可以重啟后查看,防止重啟后失效

          reboot

           

           

          =======================

          posted @ 2020-03-02 21:11 狼愛上貍 閱讀(221) | 評論 (0)編輯 收藏

          MacOS設(shè)置自動登錄

          https://jingyan.baidu.com/article/59a015e375e45af794886582.html

          posted @ 2020-03-02 19:47 狼愛上貍 閱讀(128) | 評論 (0)編輯 收藏

          VM安裝CentOS8


          https://blog.csdn.net/BryantJamesHua/article/details/101480034
          https://www.cnblogs.com/fanzhenyong/p/11616192.html

          posted @ 2020-03-02 18:34 狼愛上貍 閱讀(107) | 評論 (0)編輯 收藏

          VM安裝macOS10.15 VMware TOOLS

          https://blog.csdn.net/qq_41855420/article/details/102756313

          注意要先把虛擬機(jī)的安裝光盤退出。

          posted @ 2020-03-01 20:45 狼愛上貍 閱讀(3091) | 評論 (0)編輯 收藏

          VM安裝macOS10.15


          https://blog.csdn.net/qq_41855420/article/details/102750895?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

          在這個地方,要把服務(wù)里的那幾個VM啟動,否則DHCP無法安裝。
          ⑧、設(shè)置黑蘋果Catalina 10.15系統(tǒng)

          posted @ 2020-03-01 20:43 狼愛上貍 閱讀(181) | 評論 (0)編輯 收藏

          Flutter打包Apk

          https://www.jianshu.com/p/d58dab805ca6

          keytool -genkey -v -keystore ./key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
          apk 輸出在:
          C:\Users\Administrator\AndroidStudioProjects\flutter_app\build\app\outputs\apk\release
          key.properties
          storePassword=123456
          keyPassword=123456
          keyAlias=key
          storeFile=
          C:/Users/Administrator/AndroidStudioProjects/flutter_app/key.jks

          b
          uild.gradle

          def localProperties = new Properties()
          def localPropertiesFile = rootProject.file('local.properties')
          if (localPropertiesFile.exists()) {
          localPropertiesFile.withReader('UTF-8') { reader ->
          localProperties.load(reader)
          }
          }

          def flutterRoot = localProperties.getProperty('flutter.sdk')
          if (flutterRoot == null) {
          throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
          }

          def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
          if (flutterVersionCode == null) {
          flutterVersionCode = '1'
          }

          def flutterVersionName = localProperties.getProperty('flutter.versionName')
          if (flutterVersionName == null) {
          flutterVersionName = '1.0'
          }

          apply plugin: 'com.android.application'
          apply plugin: 'kotlin-android'
          apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"


          def keystorePropertiesFile = rootProject.file("key.properties")
          def keystoreProperties = new Properties()
          keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
          android {
          compileSdkVersion 28

          sourceSets {
          main.java.srcDirs += 'src/main/kotlin'
          }

          lintOptions {
          disable 'InvalidPackage'
          }

          defaultConfig {
          // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
          applicationId "com.example.flutter_app"
          minSdkVersion 16
          targetSdkVersion 28
          versionCode flutterVersionCode.toInteger()
          versionName flutterVersionName
          testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
          }

          signingConfigs {
          release {
          keyAlias keystoreProperties['keyAlias']
          keyPassword keystoreProperties['keyPassword']
          storeFile file(keystoreProperties['storeFile'])
          storePassword keystoreProperties['storePassword']
          }
          }

          buildTypes {
          release {
          // TODO: Add your own signing config for the release build.
          // Signing with the debug keys for now, so `flutter run --release` works.
          //signingConfig signingConfigs.debug
          signingConfig signingConfigs.release
          }
          }
          }

          flutter {
          source '../..'
          }

          dependencies {
          implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
          testImplementation 'junit:junit:4.12'
          androidTestImplementation 'androidx.test:runner:1.1.1'
          androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
          }

          posted @ 2020-02-29 11:48 狼愛上貍 閱讀(348) | 評論 (0)編輯 收藏

          Flutter實(shí)現(xiàn)Web環(huán)境配置

          參見:
          https://www.jianshu.com/p/2893f2b52eee

          https://www.cnblogs.com/duanzb/p/11188979.html

          即是
          在PATH中增加2個:
          C:\Flutter\flutter1.12.13\.pub-cache\bin

          C:\Flutter\flutter1.12.13\bin\cache\dart-sdk\bin

          posted @ 2020-02-25 18:18 狼愛上貍 閱讀(151) | 評論 (0)編輯 收藏

          flutter顯示Error: No pubspec.yaml file found.

          打開項(xiàng)目總文件夾運(yùn)行,不要打開上一級目錄運(yùn)行
          F:\fluterapp\hellow_horld(項(xiàng)目名)這里打開
          F:\fluterapp 不要在這里打開


          https://blog.csdn.net/qq_31659129/article/details/97244526

          posted @ 2020-02-25 12:47 狼愛上貍 閱讀(947) | 評論 (0)編輯 收藏

          Flutter編譯報(bào)錯:The method 'CachedNetworkImageProvider.load' has fewer positional

          將cached_network_image的版本號升級到2.0.0-rc


          https://blog.csdn.net/yinxing2008/article/details/103374996

          posted @ 2020-02-25 12:46 狼愛上貍 閱讀(405) | 評論 (0)編輯 收藏

          Flutter項(xiàng)目實(shí)戰(zhàn)之Flutter_Gank

          https://www.jianshu.com/p/1031f30dbb2e

          posted @ 2020-02-25 11:40 狼愛上貍 閱讀(141) | 評論 (0)編輯 收藏

          安裝node-canvas時win_delay_load_hook.c錯誤

          解決辦法: 修改以下文件 C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\src\win_delay_load_hook.c 增加以下代碼,到第一個#include前 #ifndef DELAYIMP_INSECURE_WRITABLE_HOOKS#define DELAYIMP_INSECURE_WRITABLE_HOOKS#endif 參考: https://github.com/nodejs/node-gyp/issues/949 https://github.com/Automattic/node-canvas/issues/619 ———————————————— 版權(quán)聲明:本文為CSDN博主「Amatig」的原創(chuàng)文章,遵循CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/cooltigerkin/article/details/51807588

          posted @ 2020-02-22 16:33 狼愛上貍 閱讀(339) | 評論 (0)編輯 收藏

          VS2015與Win10SDK的問題

          VS2015最高支持14393版本的SDK,之后的從15063起就必須要VS2017,很多人出現(xiàn)VS找不到rc.ex和cl.exe的問題,就是沒有安裝SDK或安裝了VS不支持的SDK版本;這個問題有人在知乎上提問過“如何將獨(dú)立安裝的win10SDK與vs2015建立聯(lián)系?“ VS2015不完全支持Win10的某些項(xiàng)目編譯,比如應(yīng)用商店應(yīng)用、1703、1709的驅(qū)動程序,但是VS2017太難用了,所以我還是堅(jiān)持用2015 解決辦法: 卸載新版本W(wǎng)inSDK,安裝14393版本的SDK 或 卸載VS2015安裝VS2017 ———————————————— 版權(quán)聲明:本文為CSDN博主「樓頂上的貓」的原創(chuàng)文章,遵循CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_30113467/article/details/100013766

          posted @ 2020-02-22 14:46 狼愛上貍 閱讀(258) | 評論 (0)編輯 收藏

          Win10、Ubuntu雙系統(tǒng)正確卸載Ubuntu

          Win10、Ubuntu雙系統(tǒng)正確卸載Ubuntu

            此前我的Ubuntu不是wubi方式安裝的,因?yàn)槁犝f此方式安裝有多種缺陷,于是我選擇U盤安裝。這時想要卸載Ubuntu了,想到卸載這個也會有些小阻礙,就寫下這篇博文表示記錄一下Ubuntu的正確卸載方法。

            在每次開機(jī)時都會有GURB菜單,這表示寫入到安裝Ubuntu的時候把GURB寫入到了MBR,所以卸載Ubuntu前首先需要將MBR重寫,去掉Ubuntu的GURB。如果朋友們不進(jìn)行這一步把Ubuntu強(qiáng)行干掉,會讓windows也直接GG。

            重寫MBR有兩種方法:

              一、放入Windows的安裝盤,進(jìn)入Windows安裝程序,進(jìn)入恢復(fù)控制臺,輸入命令fixmbr。
                二、使用MbrFix工具進(jìn)行修復(fù)。

            我選擇的是MbrFix,下載地址:http://www.cnitblog.com/Files/CoffeeCat/MbrFix.rar

            下載完成后運(yùn)行命令行,然后進(jìn)入存放MbrFix.exe的目錄下,輸入指令MbrFix /drive 0 fixmbr /yes,重啟就可以直接進(jìn)入windows了。

            ps:輸入命令行提示"function failed.error 5:拒絕訪問"如何解決?

              找到MbrFix.exe,右擊屬性,進(jìn)入兼容性選項(xiàng)卡,勾選"以管理員身份運(yùn)行此程序",確定退出,然后重新輸入指令即可解決。

            

            搞定第一步之后,右鍵我的電腦進(jìn)入管理,磁盤管理,如果是自己安裝的Ubuntu,應(yīng)該知道在安裝的時候分配了幾個分區(qū)在此系統(tǒng)上,如果只是雙系統(tǒng),除了Windows下有標(biāo)注卷名的其余應(yīng)該都是Ubuntu的分區(qū)。右鍵Ubuntu分區(qū),刪除卷,標(biāo)注藍(lán)條會變成綠條,把幾個分區(qū)全部刪除完成,右鍵新加卷一步一步完成恢復(fù)成為Windows的邏輯分區(qū)了。

          來自:https://www.cnblogs.com/-Yvan/p/4975326.html

          posted @ 2020-02-20 18:18 狼愛上貍 閱讀(1425) | 評論 (0)編輯 收藏

          Flutter配置gradle

          maven { url 'https://maven.aliyun.com/repository/google' }
          maven { url 'https://maven.aliyun.com/repository/jcenter' }
          maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }


          https://blog.csdn.net/qq_43225978/article/details/94008529

          posted @ 2020-02-19 09:46 狼愛上貍 閱讀(195) | 評論 (0)編輯 收藏

          Flutter打包apk

          https://www.jianshu.com/p/fabcfd621e01

          posted @ 2020-02-12 09:37 狼愛上貍 閱讀(173) | 評論 (0)編輯 收藏

          flutter 卡在Running Gradle task 'assembleDebug'...

          https://www.cnblogs.com/wupeng88/p/11455874.html

          posted @ 2020-02-11 16:37 狼愛上貍 閱讀(1404) | 評論 (0)編輯 收藏

          IPFS問題

          1.把  "Gateway": "/ip4/127.0.0.1/tcp/8080"修改為:"Gateway": "/ip4/0.0.0.0/tcp/8080",這樣本機(jī)就可以用192.168WEB訪問了。
          2.把WINDOWS防火墻入站的8080端口打開,這樣在局域網(wǎng)就能訪問了。

          posted @ 2020-01-16 14:44 狼愛上貍 閱讀(126) | 評論 (0)編輯 收藏

          【我的區(qū)塊鏈之路】- 談一談IPFS原理及玩法

          https://blog.csdn.net/qq_25870633/article/details/82027510

          posted @ 2020-01-12 16:17 狼愛上貍 閱讀(170) | 評論 (0)編輯 收藏

          入門 Webpack,看這篇就夠了

          https://segmentfault.com/a/1190000006178770#articleHeader3

          posted @ 2020-01-04 17:22 狼愛上貍 閱讀(141) | 評論 (0)編輯 收藏

          文檔計(jì)劃 | IPFS API參考文檔

          https://www.jianshu.com/p/e38d5f733c81

          posted @ 2020-01-03 19:03 狼愛上貍 閱讀(210) | 評論 (0)編輯 收藏

          IPFS環(huán)境搭建和用ipfs-api訪問ipfs網(wǎng)絡(luò)

          https://blog.csdn.net/mongo_node/article/details/80143631

          posted @ 2020-01-03 17:55 狼愛上貍 閱讀(342) | 評論 (0)編輯 收藏

          MySQL-Front連接MYSQL錯誤永久方案

          在之前的博客中提到解決此問題的方法是進(jìn)入mysql的命令窗口,執(zhí)行set global show_compatibility_56=on;

          但是該方法只能生效一次,當(dāng)電腦重啟或者mysql服務(wù)重啟的時候,就得重新再設(shè)置一次,下面提供一個永久生效的方法,即不通過上述方法,而是修改mysql的配置文件,找到my.ini的配置文件,在文件的最后添加:show_compatibility_56 = 1 即可。

          本人的my.ini的文件路徑是:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
          ————————————————
          版權(quán)聲明:本文為CSDN博主「讓愛遠(yuǎn)行2015」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
          原文鏈接:https://blog.csdn.net/u011065164/article/details/53393348

          posted @ 2020-01-01 13:52 狼愛上貍 閱讀(191) | 評論 (0)編輯 收藏

          安裝solc指定版本

          cnpm install -g solc@0.4.22

          posted @ 2020-01-01 12:28 狼愛上貍 閱讀(1618) | 評論 (0)編輯 收藏

          Node.js安裝及環(huán)境配置之Windows篇

          https://www.jianshu.com/p/03a76b2e7e00

          posted @ 2020-01-01 12:13 狼愛上貍 閱讀(171) | 評論 (0)編輯 收藏

          crx文件怎么安裝?谷歌瀏覽器Chrome打開crx文件的方法

          https://www.jb51.net/softjc/402153.html

          posted @ 2019-12-29 22:57 狼愛上貍 閱讀(193) | 評論 (0)編輯 收藏

          go調(diào)用以太坊rpc寫入合約操作中的DATA數(shù)據(jù)解析(純字符串參數(shù))

          https://blog.csdn.net/weixin_42608885/article/details/100889008

          posted @ 2019-12-27 14:49 狼愛上貍 閱讀(273) | 評論 (0)編輯 收藏

          一步步構(gòu)建自己的智能合約

          https://segmentfault.com/a/1190000014797663

          posted @ 2019-12-26 16:09 狼愛上貍 閱讀(153) | 評論 (0)編輯 收藏

          如何審計(jì)一個智能合約

          https://cloud.tencent.com/developer/article/1522230

          posted @ 2019-12-26 15:37 狼愛上貍 閱讀(114) | 評論 (0)編輯 收藏

          如何調(diào)用以太坊智能合約

          https://www.cnblogs.com/KRDecad3/p/11745568.html

          posted @ 2019-12-26 15:31 狼愛上貍 閱讀(229) | 評論 (0)編輯 收藏

          私鑰生成錢包助記詞的流程

          https://www.cnblogs.com/hankal/p/9472920.html

          posted @ 2019-12-24 10:02 狼愛上貍 閱讀(641) | 評論 (0)編輯 收藏

          BIP39錢包助記詞規(guī)范

          https://www.jianshu.com/p/d5bac6d36dc6

          posted @ 2019-12-24 10:01 狼愛上貍 閱讀(510) | 評論 (0)編輯 收藏

          remix

          https://remix.ethereum.org/
          http://remix.hubwiz.com/
          https://ethereum.github.io/

          posted @ 2019-12-22 00:27 狼愛上貍 閱讀(100) | 評論 (0)編輯 收藏

          Web3與智能合約交互實(shí)戰(zhàn)

          最新內(nèi)容會更新在主站深入淺出區(qū)塊鏈社區(qū)
          原文鏈接:Web3與智能合約交互實(shí)戰(zhàn)

          寫在前面

          在最初學(xué)習(xí)以太坊的時候,很多人都是自己創(chuàng)建以太坊節(jié)點(diǎn)后,使用geth與之交互。這種使用命令行交互的方法雖然讓很多程序員感到興奮(黑客帝國的既視感?),但不可能指望普通用戶通過命令行使用Dapp。因此,我們需要一種友好的方式(比如一個web頁面)來與智能合約交互,于是問題的答案就是web3.js

          Web3.js

          Web3.js是以太坊官方的Javascript API,可以幫助智能合約開發(fā)者使用HTTP或者IPC與本地的或者遠(yuǎn)程的以太坊節(jié)點(diǎn)交互。實(shí)際上就是一個庫的集合,主要包括下面幾個庫:

          • web3-eth用來與以太坊區(qū)塊鏈和智能合約交互
          • web3-shh用來控制whisper協(xié)議與p2p通信以及廣播
          • web3-bzz用來與swarm協(xié)議交互
          • web3-utils包含了一些Dapp開發(fā)有用的功能

          Web3與geth通信使用的是 JSON-RPC ,這是一種輕量級的RPC(Remote Procedure Call)協(xié)議,整個通信的模型可以抽象為下圖。

          Web3 Communication Model

          搭建測試鏈

          在開發(fā)初期,我們并沒有必要使用真實(shí)的公鏈,為了開發(fā)效率,一般選擇在本地搭建測試鏈。在本文我們選擇的Ganache(在此之前使用的是testrpc,Ganache屬于它的升級版),一個圖形化測試軟件(也有命令行版本),可以一鍵在本地搭建以太坊區(qū)塊鏈測試環(huán)境,并且將區(qū)塊鏈的狀態(tài)通過圖形界面顯示出來,Ganache的運(yùn)行界面如下圖所示。

          Ganache

          從圖中可以看到Ganache會默認(rèn)創(chuàng)建10個賬戶,監(jiān)聽地址是http://127.0.0.1:7545,可以實(shí)時看到Current BlockGas PriceGas Limit等信息。

          創(chuàng)建智能合約

          目前以太坊官方全力支持的智能合約開發(fā)環(huán)境是Remix IDE,我們在合約編輯頁面編寫如下代碼:

          pragma solidity ^0.4.21;  contract InfoContract {         string fName;    uint age;        function setInfo(string _fName, uint _age) public {        fName = _fName;        age = _age;    }        function getInfo() public constant returns (string, uint) {        return (fName, age);    }    }

          代碼很簡單,就是簡單的給nameage變量賦值與讀取,接下來切換到 run 的 tab 下,將Environment切換成Web3 Provider,并輸入我們的測試鏈的地址http://127.0.0.1:7545,這里對這三個選項(xiàng)做一簡單說明:

          • Javascript VM:簡單的Javascript虛擬機(jī)環(huán)境,純粹練習(xí)智能合約編寫的時候可以選擇
          • Injected Web3:連接到嵌入到頁面的Web3,比如連接到MetaMask
          • Web3 Provider:連接到自定義的節(jié)點(diǎn),如私有的測試網(wǎng)絡(luò)。

          如果連接成功,那么在下面的Account的選項(xiàng)會默認(rèn)選擇 Ganache 創(chuàng)建的第一個賬戶地址。接下來我們點(diǎn)擊Create就會將我們的智能合約部署到我們的測試網(wǎng)中。接下來 Remix 的頁面不要關(guān)閉,在后面編寫前端代碼時還要用到合約的地址以及ABI信息。

          安裝Web3

          在這之前,先在終端創(chuàng)建我們的項(xiàng)目:

          > mkdir info > cd info

          接下來使用 node.js 的包管理工具 npm 初始化項(xiàng)目,創(chuàng)建package.json 文件,其中保存了項(xiàng)目需要的相關(guān)依賴環(huán)境。

          > npm init

          一路按回車直到項(xiàng)目創(chuàng)建完成。最后,運(yùn)行下面命令安裝web.js:

          > npm install web3

          注意: 在實(shí)際安裝過程中我發(fā)現(xiàn)web3在安裝完成后并沒有 /node_modules/web3/dist/we3.min.js 文件,這個問題在 issue#1041中有體現(xiàn),但官方好像一直沒解決。不過可以在這里下載所需的文件,解壓后將dist文件夾的內(nèi)容拷貝到 /node_modules/web3路徑下。

          創(chuàng)建 UI

          在項(xiàng)目目錄下創(chuàng)建index.html,在這里我們將創(chuàng)建基礎(chǔ)的 UI,功能包括nameage的輸入框,以及一個按鈕,這些將通過 jQuery 實(shí)現(xiàn):

          <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title>      <link rel="stylesheet" type="text/css" href="main.css">      <script src="./node_modules/web3/dist/web3.min.js"></script>  </head> <body>     <div class="container">          <h1>Info Contract</h1>          <h2 id="info"></h2>          <label for="name" class="col-lg-2 control-label">Name</label>         <input id="name" type="text">          <label for="name" class="col-lg-2 control-label">Age</label>         <input id="age" type="text">          <button id="button">Update Info</button>       </div>      <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>      <script>        // Our future code here..     </script>  </body> </html>

          接下來需要編寫main.css文件設(shè)定基本的樣式:

          body {     background-color:#F0F0F0;     padding: 2em;     font-family: 'Raleway','Source Sans Pro', 'Arial'; } .container {     width: 50%;     margin: 0 auto; } label {     display:block;     margin-bottom:10px; } input {     padding:10px;     width: 50%;     margin-bottom: 1em; } button {     margin: 2em 0;     padding: 1em 4em;     display:block; }  #info {     padding:1em;     background-color:#fff;     margin: 1em 0; }

          使用Web3與智能合約交互

          UI 創(chuàng)建好之后,在<script>標(biāo)簽中間編寫web.js的代碼與智能合約交互。首先創(chuàng)建web3實(shí)例,并與我們的測試環(huán)境連接:

          <script>     if (typeof web3 !== 'undefined') {         web3 = new Web3(web3.currentProvider);     } else {         // set the provider you want from Web3.providers         web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));     } </script>

          這段代碼是web3.js Github提供的樣例,意思是如果web3已經(jīng)被定義,那么就可以直接當(dāng)作我們的 provider 使用。如果沒有定義,則我們手動指定 provider。

          這里可能會存在疑問:為什么 web3 會被事先定義呢?實(shí)際上,如果你使用類似 MetaMask(一個 Chrome 上的插件,迷你型以太坊錢包)這樣的軟件,provider 就會被自動植入。

          在上面代碼的基礎(chǔ)上,接下來設(shè)置默認(rèn)的以太坊賬戶:

          web3.eth.defaultAccount = web3.eth.accounts[0];

          在上文中我們使用 Ganache 已經(jīng)創(chuàng)建了 10 個賬戶了,這里我們選擇第一個賬戶當(dāng)作默認(rèn)賬戶。

          接下來需要讓我們的web3知道我們的合約是什么樣的,這里需要用到合約的 ABI(Application Binary Interface)ABI可以使我們調(diào)用合約的函數(shù),并且從合約中獲取數(shù)據(jù)。

          在上文中我們已經(jīng)在 Remix 中創(chuàng)建了我們的合約,這時重新回到 Remix,在 Compile 的 tab 下我們點(diǎn)擊Details 出現(xiàn)的頁面中我們可以拷貝合約的ABI,如下圖所示。

          將其復(fù)制到代碼中:

          var infoContract = web3.eth.contract(PASTE ABI HERE!);

          接下來轉(zhuǎn)到 run 的tab,拷貝合約的地址,將其復(fù)制到下面的代碼中:

          var info = InfoContract.at('PASTE CONTRACT ADDRESS HERE');

          完成這些我們就可以調(diào)用合約中的函數(shù)了,下面我們使用 jQuery 與我們的合約進(jìn)行交互:

          info.getInfo(function(error, result){     if(!error)         {             $("#info").html(result[0]+' ('+result[1]+' years old)');             console.log(result);         }     else         console.error(error); });  $("#button").click(function() {     info.setInfo($("#name").val(), $("#age").val()); });

          以上的代碼就簡單地實(shí)現(xiàn)了對合約中兩個函數(shù)的調(diào)用,分別讀取和顯示nameage變量。

          到此我們就完成了全部的代碼,完整代碼可以在 InfoContract 中找到。在瀏覽器中打開index.html測試效果如下圖(輸入名字和年齡后刷新)。

          本文的作者是蓋蓋,他的微信公眾號: chainlab

          參考文獻(xiàn)

          ☛ 深入淺出區(qū)塊鏈 - 系統(tǒng)學(xué)習(xí)區(qū)塊鏈,打造最好的區(qū)塊鏈技術(shù)博客。

          posted @ 2019-12-21 14:46 狼愛上貍 閱讀(188) | 評論 (0)編輯 收藏

          GitHub項(xiàng)目、代碼搜索、使用等技巧

          https://blog.csdn.net/xiaomu_347/article/details/80729892

          posted @ 2019-12-21 10:14 狼愛上貍 閱讀(131) | 評論 (0)編輯 收藏

          如何在 GitHub 上找到你要的代碼?

          GitHub 在開源世界的受歡迎程度自不必多言。再加上前陣子,GitHub 官方又搞了個大新聞:私有倉庫改為免費(fèi)使用,這在原來可是需要真金白銀的買的。可見微軟收購后,依然沒有改變 GitHub 的定位,甚至還更進(jìn)一步。

          花開兩朵,各表一枝。我們今天想要聊的并不是 GitHub 多么厲害,而是你怎么能把 GitHub 用得很厲害

          你在 GitHub 上搜索代碼時,是怎么樣操作的呢?是不是就像這樣,直接在搜索框里輸入要檢索的內(nèi)容,然后不斷在列表里翻頁找自己需要的內(nèi)容?

          或者是簡單篩選下,在左側(cè)加個語言的過濾項(xiàng)。

          再或者改變一下列表的排序方式

          這就是「全部」了嗎?

          一般的系統(tǒng)檢索功能,都會有一個「高級搜索」的功能。需要在另外的界面里展開,進(jìn)行二次搜索之類的。 GitHub 有沒有類似的呢?

          答案是肯定的。做為一個為萬千工程師提供服務(wù)的網(wǎng)站,不僅要有,而且還要技術(shù)范兒。

          如果我們自己開發(fā)一個類似的應(yīng)用,會怎樣實(shí)現(xiàn)呢?

          帶著思路,咱們一起來看看,GitHub 是怎樣做的。

          這里我們假設(shè)正要學(xué)習(xí) Spring Cloud,要找一個 Spring Cloud 的 Demo 參考練手。

          1. 明確搜索倉庫標(biāo)題、倉庫描述、README

          GitHub 提供了便捷的搜索方式,可以限定只搜索倉庫的標(biāo)題、或者描述、README等。

          以Spring Cloud 為例,一般一個倉庫,大概是這樣的

          其中,紅色箭頭指的兩個地方,分別是倉庫的名稱和描述。咱們可以直接限定關(guān)鍵字只查特定的地方。比如咱們只想查找倉庫名稱包含 spring cloud 的倉庫,可以使用語法

          in:name 關(guān)鍵詞

          如果想查找描述的內(nèi)容,可以使用這樣的方式:

          in:descripton 關(guān)鍵詞

          這里就是搜索上面項(xiàng)目描述的內(nèi)容。

          一般項(xiàng)目,都會有個README文件,如果要查該文件包含特定關(guān)鍵詞的話,我想你猜到了

          in:readme 關(guān)鍵詞

          2. 明確搜索 star、fork 數(shù)大于多少的

          一個項(xiàng)目 star 數(shù)的多少,一般代表該項(xiàng)目有受歡迎程度。雖然現(xiàn)在也有垃圾項(xiàng)目刷 star ,但畢竟是少數(shù), star 依然是個不錯的衡量標(biāo)準(zhǔn)。

          stars:> 數(shù)字 關(guān)鍵字。

          比如咱們要找 star 數(shù)大于 3000 的Spring Cloud 倉庫,就可以這樣

          stars:>3000 spring cloud

          如果不加 >= 的話,是要精確找 star 數(shù)等于具體數(shù)字的,這個一般有點(diǎn)困難。

          如果要找在指定數(shù)字區(qū)間的話,使用

          stars: 10..20 關(guān)鍵詞

          fork 數(shù)同理,將上面的 stars 換成fork,其它語法相同

          3. 明確搜索倉庫大小的

          比如你只想看個簡單的 Demo,不想找特別復(fù)雜的且占用磁盤空間較多的,可以在搜索的時候直接限定倉庫的size

          使用方式:

          size:>=5000 關(guān)鍵詞

          這里注意下,這個數(shù)字代表K, 5000代表著5M。

          4. 明確倉庫是否還在更新維護(hù)

          我們在確認(rèn)是否要使用一些開源產(chǎn)品,框架的時候,是否繼續(xù)維護(hù)是很重要的一點(diǎn)。如果已經(jīng)過時沒人維護(hù)的東西,踩了坑就不好辦了。而在 GitHub 上找項(xiàng)目的時候,不再需要每個都點(diǎn)到項(xiàng)目里看看最近 push 的時間,直接在搜索框即可完成。

          元旦剛過,比如咱們要找臨近年底依然在勤快更新的項(xiàng)目,就可以直接指定更新時間在哪個時間前或后的

          通過這樣一條搜索pushed:>2019-01-03 spring cloud

          咱們就找到了1月3號之后,還在更新的項(xiàng)目。

          你是想找指定時間之前或之后創(chuàng)建的倉庫也是可以的,把pushed改成created就行。

          5. 明確搜索倉庫的 LICENSE

          咱們經(jīng)常使用開源軟件,一定都知道,開源軟件也是分不同的「門派」不同的LICENSE。開源不等于一切免費(fèi),不同的許可證要求也大不相同。 2018年就出現(xiàn)了 Facebook 修改 React 的許可協(xié)議導(dǎo)致各個公司紛紛修改自己的代碼,尋找替換的框架。

          例如咱們要找協(xié)議是最為寬松的 Apache License 2 的代碼,可以這樣

          license:apache-2.0 spring cloud

          其它協(xié)議就把 apache-2.0 替換一下即可,比如換成mit之類的。

          6. 明確搜索倉庫的語言

          比如咱們就找 Java 的庫, 除了像上面在左側(cè)點(diǎn)擊選擇之外,還可以在搜索中過濾。像這樣:

          language:java 關(guān)鍵詞

          7.明確搜索某個人或組織的倉庫

          比如咱們想在 GitHub 上找一下某個大神是不是提交了新的功能,就可以指定其名稱后搜索,例如咱們看下 Josh Long 有沒有提交新的 Spring Cloud 的代碼,可以這樣使用

          user:joshlong

          組合使用一下,把 Java 項(xiàng)目過濾出來,多個查詢之間「空格」分隔即可。

          user:joshlong language:java

          找某個組織的代碼話,可以這樣:

          org:spring-cloud

          就可以列出具體org 的倉庫。



          作者:西安北大青鳥
          鏈接:https://www.jianshu.com/p/74ae16db62af
          來源:簡書
          著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

          posted @ 2019-12-20 16:49 狼愛上貍 閱讀(172) | 評論 (0)編輯 收藏

          github新手使用指南

          https://blog.csdn.net/Hanani_Jia/article/details/77950594源博客地址

          首先,我先對GitHub來一個簡單的介紹,GitHub有一個很強(qiáng)大的功能就是,你在服務(wù)器上邊可以創(chuàng)建一個庫(稍后會介紹怎么創(chuàng)建),寫代碼是一件很重的任務(wù),尤其是很多人完成一個很大的項(xiàng)目的時候,就十分的復(fù)雜,一群人一起來寫某個項(xiàng)目,大家完成的時間,完成的進(jìn)度都是不相同的,你寫一點(diǎn)我寫一點(diǎn),甚至可能你今天寫的出現(xiàn)了錯誤,影響到了我昨天寫的代碼,最后怎么才能將大家的代碼輕松的匯總起來,又怎么在匯總所有人的代碼之后發(fā)現(xiàn)錯誤等等一系列問題。這樣我們就用到了GitHub這個軟件。我們在GitHub服務(wù)器上有一個主倉庫,這里用來儲存你的所有代碼,如果不付費(fèi)的話是所有人都可以看的,如果你不想讓別人看到你的代碼,可以選擇付費(fèi)倉庫。我們創(chuàng)建了主倉庫之后,就可以在電腦上創(chuàng)建分支,之后你就可以在電腦上完成自己的代碼,寫完之后直接同步在電腦的分支,當(dāng)你認(rèn)為可以上傳的自己的主倉庫時,就可以申請更新,當(dāng)通過審核的時候,你代碼就出現(xiàn)在了自己的主倉庫中,這樣全世界的程序員都可以查看你的代碼。全世界現(xiàn)在已經(jīng)有300萬的注冊用戶,甚至還有一些相當(dāng)知名的開源項(xiàng)目也在其中公布代碼。在GitHub上你可以看到很多計(jì)算機(jī)領(lǐng)域的精英所分享的自己的代碼。這是GitHub的兩個主要優(yōu)點(diǎn),適合團(tuán)隊(duì)協(xié)作,以及下載其他優(yōu)秀者的代碼。

           

           

          今天,GitHub已是:一個擁有143萬開發(fā)者的社區(qū)。其中不乏Linux發(fā)明者Torvalds這樣的頂級黑客,以及Rails創(chuàng)始人DHH這樣的年輕極客。

          · 這個星球上最流行的開源托管服務(wù)。目前已托管431萬git項(xiàng)目,不僅越來越多知名開源項(xiàng)目遷入GitHub,比如Ruby on Rails、jQuery、Ruby、Erlang/OTP;近三年流行的開源庫往往在GitHub首發(fā),例如:BootStrapNode.jsCoffeScript等。alexa全球排名414的網(wǎng)站。

           

           

          https://github.com/ 這是GitHub的官方網(wǎng)站,在官網(wǎng)上可以注冊屬于自己的GitHub賬號,網(wǎng)上是全英文的,對于英語不好的同學(xué)建議使用谷歌瀏覽器,谷歌瀏覽器可以翻譯網(wǎng)頁變?yōu)橹形氖褂闷饋硎址奖恪?/p>

           

          通過簡單的步驟之后你就會有一個屬于自己的GitHub賬號。再簡單注冊完成之后會需要驗(yàn)證你所輸入的郵箱才能正常使用你的GitHub。

           在注冊完成之后,完成一些簡單的設(shè)置之后,你需要創(chuàng)建一個屬于自己的庫

           

          在登陸自己的GitHub賬號之后,在網(wǎng)頁右上角的小加號是用來創(chuàng)建自己的庫的按鈕,之后的步驟將網(wǎng)頁翻譯成中文之后,按提示進(jìn)行創(chuàng)建自己的庫即可。

           

          第一個框是自己為自己的庫起一個名字,第二個框是自己對庫的一個簡單介紹

          在創(chuàng)建完成自己的庫之后,下面就要讓自己的電腦克隆一個自己所創(chuàng)建的庫,方面自己電腦上的代碼同步到GitHub你所創(chuàng)建的庫當(dāng)中。

            為了實(shí)現(xiàn),就需要安裝一個軟件,Git Bash。

           

          下面我就介紹一下這個軟件的安裝,以及簡單的配置。

          git-scm.com 首先進(jìn)入GitHub官網(wǎng),下載適合自己電腦的版本

           

          下載完安裝包之后運(yùn)行

           

           

           

          在安裝過程中直接默認(rèn)選項(xiàng)即可。


           在對git bash進(jìn)行配置的時候大多數(shù)新手都是一頭霧水,下面我對配置的每一步就會有詳細(xì)的記錄。代碼我也是從網(wǎng)上和學(xué)長那邊要來的。

           

          我第一次打開軟件后看到這個界面也是一臉懵逼的,然后通過查閱了各種各樣的資料之后才有了一些思路。

           首先要在本地創(chuàng)建一個ssh key 這個的目的就是你現(xiàn)在需要在你電腦上獲得一個密匙,就是咱們平時的驗(yàn)證碼一樣的東西,獲取之后,在你的GitHub賬號里邊輸入之后,你的電腦就和你的GitHub賬號聯(lián)系在一起了,這樣以后就可以十分方便的通過Git bash 隨時上傳你的代碼。下邊介紹一下如果獲得這個鑰匙,又是如何輸入到你的GitHub里邊的呢。

            

          很多人第一次打開這個GitHub的時候一臉懵逼,認(rèn)為這是什么。對于一個新手來說看到這個是沒有任何思路,沒有任何想法的。

          這一欄 開始是你的計(jì)算機(jī)的名字在我這里就是Hanani @后邊的內(nèi)容是你的計(jì)算機(jī)型號,很多時候有的人打開之后@后邊是亂碼,這個時候也不要在意,因?yàn)橛行╇娔X型號是中文的,可能在顯示的時候出現(xiàn)了問題,不影響你后期的操作。

            接下來,就要開始獲取屬于你自己的密匙。在git bash中所有功能都是通過簡單的一些代碼來實(shí)現(xiàn)的。獲取密匙的時候需要輸入

          $ ssh-keygen -t rsa -"your_email@youremail.com"

          需要輸入這個代碼,引號內(nèi)需要改成你在注冊GitHub的時候綁定的郵箱賬號。之后會有一些簡單的讓你確認(rèn)的操作,之后讓你會提示操作路徑、密碼等等,一般情況下就直接按回車一路過就可以。

           

          如果之后你出現(xiàn)了這個界面之后,就說明你的密匙已經(jīng)成功創(chuàng)建了。現(xiàn)在你就需要去他剛剛顯示的存儲位置打開它,把其中的內(nèi)容復(fù)制出來。


           

          .ssh這個文件夾中

          之后你會看到這些內(nèi)容,有的人會在id_rsa后邊帶有一個pub,之前看網(wǎng)上教程需要找到帶pub的文件,因?yàn)槲以谏珊鬀]有帶.pub的文件,懷著忐忑的心打開id_rsa后發(fā)現(xiàn)這里邊的密匙也是可以使用的。打開id_rsa的時候需要用記事本的方式打開。

          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIskXqZF3SSFtACK6zoNGJabikTBC3kig6+4j4dCq1tswhA9YkuJCi0WpRmGYWBQ67dyT2or7RedFZlULLZN3nL6AWlo5V2jRXw4WQxCon2rU1p122wmiTzqYOfsykjwullWV4bYcZU4n77A4/9WwlSqZCpEbcdwV8IMkvwfJUInSWqTvmYMcKTWu8yad5DZ2v7LBWfgsL/Tfx7aEB8UjDNJ6SPw30Yijy+62YrftYGgbuwoiL9hDNGO2LfjgOkglHTBJaZe31uQLLWc5uCzd+7Dgh7RaKMmeuz2Uv7yqm/IEU9jH8cPMR9YRPIhmzg38G2s9ILn27QqW9j1hrFY1V 15229020556@163.com

          這就是我所獲取的密匙,打開之后很長的一段,不要驚訝,沒有問題,這就是你所需要的密匙。

           現(xiàn)在你就需要登錄到你的GitHub上邊添加這個密匙,

           

           

          打開你GitHub的設(shè)置界面,找到SSH and GPG keys這個選項(xiàng)之后,在網(wǎng)頁右上角有一個添加新的SSH keys 點(diǎn)擊

           

          這里的title 是讓你給你的密匙起一個名字,根據(jù)個人喜好,什么名字都可以,然后把你在剛剛文件中復(fù)制的密匙,填寫在下邊的大框里。保存即可。

          之后你就可以回到你的Git bash上邊了

          然后輸入上邊的代碼,來檢查是否成功綁定。第一次綁定的時候輸入上邊的代碼之后會提示是否continue,在輸入yes后如果出現(xiàn)了You've successfully authenticated, but GitHub does not provide shell access 。那就說明,已經(jīng)成功連上了GitHub。接下來還需要簡單的設(shè)置一些東西。

          輸入上邊的代碼,name最好和GitHub上邊的一樣,email是一定要是注冊GitHub的那個郵箱地址

          這兩個的順序可以顛倒,沒有固定的順序。

           下面就要將你的庫克隆下來到本地電腦中,方便以后進(jìn)行上傳代碼。

           

          在庫創(chuàng)建完成之后 會有一個網(wǎng)址出現(xiàn)在網(wǎng)頁中。

           

          個人習(xí)慣將自己的文件儲存在d盤之中,所以你先需要將git bash定位在d盤中

           

          git bash中輸入 cd /D 注意盤名字一定要是大寫。如不輸入這個語句 不給git bash定位的話,默認(rèn)的本地文件位置是在c盤中。

          輸入之后會出現(xiàn)/D說明定位成功。

          之后輸入

          git clone后邊的網(wǎng)址就是你創(chuàng)建庫成功之后的網(wǎng)址


          之后打開我所定位的D盤

           

          可以看到,D盤中已經(jīng)有以我的庫名所創(chuàng)建的文件夾了。


          打開這個文件夾,然后在其中創(chuàng)建一個任意格式,任意名稱的文件。

           

          之后重新定位git 把書 的位置,定位在你庫的文件夾。


          之后輸入ls語句 ls的作用是查看你目前所定位的文件夾中的文件,現(xiàn)在可以看出來,我剛剛所創(chuàng)建的test文件已經(jīng)出現(xiàn)了。


          然后輸入 git add test.txt

          之后輸入然后git commit -m "cc"  引號內(nèi)的內(nèi)容可以隨意改動,這個語句的意思是 給你剛剛上傳的文件一個備注,方便查找記憶而已


          輸入之后出現(xiàn)以上情況,然后在輸入git push origin master 之后會出現(xiàn)一個

           

           

          界面,在這里登陸你之前注冊的GitHub賬號之后點(diǎn)擊login。

           

          如果之后出現(xiàn)這種情況的話,就是登陸失敗了,這時候你就需要輸入你GitHub的賬號名稱

          輸入之后會出現(xiàn)這個界面,然后再次輸入你的GitHub密碼。


          出現(xiàn)類似界面,你就可以歡呼了,代表你成功了。

          現(xiàn)在打開你的GitHub網(wǎng)站,找到你創(chuàng)建的庫

           

          發(fā)現(xiàn)今天的格子已經(jīng)綠了,說明你已經(jīng)上傳了你剛剛所創(chuàng)建的文件。

          再之后,你只需要將你的代碼,放到庫的對應(yīng)的文件夾中,然后使用 先CD到你庫里面,再git add 、git commit -m "   " 、最后git push origin master,將你的代碼提交就可以了。

           同樣我感覺網(wǎng)頁版的github更適合新手小白,https://blog.csdn.net/hanani_jia/article/details/79855429 這是我寫的一篇網(wǎng)頁版github的簡單操作,需要的可以看一下。

          posted @ 2019-12-20 15:30 狼愛上貍 閱讀(129) | 評論 (0)編輯 收藏

          TypeError: Cannot read property 'address' of undefined

                  if(!deployed.address) {
                               ^

          TypeError: Cannot read property 'address' of undefined
          解決辦法:調(diào)整gas的值就好了。

          posted @ 2019-12-18 19:27 狼愛上貍 閱讀(651) | 評論 (0)編輯 收藏

          以太坊上最多存放多少字節(jié)?成本如何?

          http://www.360doc.com/content/18/1014/17/16619343_794677023.shtml

          posted @ 2019-12-16 09:28 狼愛上貍 閱讀(137) | 評論 (0)編輯 收藏

          網(wǎng)絡(luò)在線工具

          https://www.bejson.com/

          posted @ 2019-12-16 09:16 狼愛上貍 閱讀(120) | 評論 (0)編輯 收藏

          以太坊區(qū)塊鏈的區(qū)塊(Block)結(jié)構(gòu)

          https://blog.csdn.net/luoye4321/article/details/82531212

          posted @ 2019-12-16 08:40 狼愛上貍 閱讀(259) | 評論 (0)編輯 收藏

          以太坊·將數(shù)據(jù)寫入到區(qū)塊鏈中

          https://blog.csdn.net/weixin_34055787/article/details/89733910

          posted @ 2019-12-13 18:16 狼愛上貍 閱讀(250) | 評論 (0)編輯 收藏

          Visual Studio 2015下載

          版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
          本文鏈接:https://blog.csdn.net/yezishuang/article/details/91489354

          1.Visual Studio 2015 專業(yè)版和企業(yè)版下載

          https://www.cnblogs.com/bwlluck/p/5514424.html

          https://www.cnblogs.com/wgscd/p/4671374.html

           

          2.Visual Studio 2013

          https://www.cnblogs.com/abeam/p/6781006.html

           

          3.Visual Studio 2017

          https://www.cnblogs.com/jian-pan/p/6942635.html

          Microsoft Visual Studio Enterprise 2017 企業(yè)版
          KEY:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF
          Microsoft Visual Studio Professional 2017 專業(yè)版
          KEY:KBJFW-NXHK6-W4WJM-CRMQB-G3CDH

           

          4.Visual Studio 2019

          https://www.cnblogs.com/zengxiangzhan/p/vs2015.html

          https://visualstudio.microsoft.com/zh-hans/downloads/ (下載地址)

           Visual Studio 2019 Enterprise
          BF8Y8-GN2QH-T84XB-QVY3B-RC4DF

          Visual Studio 2019 Professional
          NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y

          posted @ 2019-12-01 12:30 狼愛上貍 閱讀(114) | 評論 (0)編輯 收藏

          使用Remix IDE快速部署你的第一個智能合約

          https://blog.csdn.net/qq_27317475/article/details/80894593

          posted @ 2019-11-28 21:01 狼愛上貍 閱讀(176) | 評論 (0)編輯 收藏

          genesis.json的問題

          以前的genesis.json的文件差不多是這樣的:
              {
                "config": {
                      "chainId": 10,
                      "homesteadBlock": 0,
                      "eip155Block": 0,
                      "eip158Block": 0
                  },
                "alloc"      : {},
                "coinbase"   : "0x0000000000000000000000000000000000000000",
                "difficulty" : "0x00000002",
                "extraData"  : "",
                "gasLimit"   : "0x2fefd8",
                "nonce"      : "0x0000000000000042",
                "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
                "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
                "timestamp"  : "0x00"
              }
          用這個創(chuàng)世塊的描述文件初始化時,出現(xiàn)錯誤:
          Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0
          百度吧,沒有一個解決辦法。
          后來用Puppeth命令創(chuàng)建json文件,并做了修改,如下所示:
          {
          "config": {
          "chainId": 666,
          "homesteadBlock": 0,
          "eip150Block": 0,
          "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "eip155Block": 0,
          "eip158Block": 0,
          "byzantiumBlock": 0,
          "constantinopleBlock": 0,
          "petersburgBlock": 0,
          "istanbulBlock": 0,
          "ethash": {}
          },
          "nonce": "0x0",
          "timestamp": "0x5ddf8f3e",
          "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "gasLimit": "0x47b760",
          "difficulty": "0x00002",
          "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "coinbase": "0x0000000000000000000000000000000000000000",
          "alloc": { }
          },
          "number": "0x0",
          "gasUsed": "0x0",
          "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
          }



          初始化:
          geth --identity "MyEth" --rpc --rpcport "8545" --rpccorsdomain "*" --datadir gethdata --port "30303" --nodiscover --rpcapi "db,eth,net,personal,web3" --networkid 1999 init genesis.json
          控制臺:
          geth --identity "MyEth" --rpc --rpcport "8545" --rpccorsdomain "*" --datadir gethdata --port "30303" --nodiscover --rpcapi "db,eth,net,personal,web3" --networkid 1999 --dev.period 1 console
          建立用戶:
          >personal.newAccount();
          挖礦:
          miner.start();
          終于順利挖到了人生第一桶金。

          posted @ 2019-11-28 19:15 狼愛上貍 閱讀(3681) | 評論 (0)編輯 收藏

          windows使用geth搭建以太坊私鏈

          第一步 安裝geth

          下載地址:https://ethereum.github.io/go-ethereum/downloads/

          點(diǎn)擊安裝勾選development tools

          1.png

          第二步 創(chuàng)建您的帳戶

          在當(dāng)前文件夾下創(chuàng)建node1文件夾

          創(chuàng)建一個賬戶(也稱為錢包)

          Devnet $ geth --datadir node1/ account new
          Your new account is locked with a password. Please give a password. Do not forget this password.
          Passphrase: 輸入你的密碼
          Repeat passphrase: 確認(rèn)你的密碼
          Address: {08a58f09194e403d02a1928a7bf78646cfc260b0}

          第三步 geth命令創(chuàng)建您的Genesis文件

          生成的文件是用于初始化區(qū)塊鏈的文件。第一個塊叫做創(chuàng)世塊,是根據(jù)genesis.json文件中的參數(shù)生成的。

          Geth安裝后目錄下有很多可執(zhí)行文件如puppeth或bootnode。你可以在Geth github上找到完整的列表。
          Puppeth可以創(chuàng)建創(chuàng)世區(qū)塊的json文件。
          開始使用Puppeth:

          1、win鍵 + r 進(jìn)入cmd命令行,進(jìn)入到安裝geth的文件夾執(zhí)行 puppeth 然后順序執(zhí)行下面操作

          2、Please specify a network name to administer (no spaces, please)
          > devnet(這里隨便填寫一個網(wǎng)絡(luò)管理名稱即可,如有需要后面可以通過--network重新設(shè)置)
          What would you like to do? (default = stats)
           1. Show network stats
           2. Configure new genesis
           3. Track new remote server
           4. Deploy network components

          > 2(這里選擇2,回車,配置新的創(chuàng)世區(qū)塊)

          3、Which consensus engine to use? (default = clique)
             1. Ethash - proof-of-work
             2. Clique - proof-of-authorit

          > 1(這里選擇pow共識機(jī)制)

          4、Which accounts should be pre-funded? (advisable at least one)

          > 0x1234567890123456789012345678901234567890(這個是設(shè)置預(yù)分配以太坊的賬戶,建議設(shè)置一個有私鑰的地址可以后面測試使用,設(shè)置好后再按一次回車)

          5、Specify your chain/network ID if you want an explicit one (default = random)
          > 666(這里就是鏈的chainId,可以隨意輸入也可以不輸直接回車默認(rèn)隨機(jī)數(shù)字)

          6、What would you like to do? (default = stats)

          1. Show network stats
          2. Manage existing genesis
          3. Track new remote server
          4. Deploy network components
            > 2(管理已擁有的創(chuàng)世塊)

          7、 1. Modify existing fork rules
          2. Export genesis configuration
          3. Remove genesis configuration
          > 2(選擇導(dǎo)出創(chuàng)世配置)

          8、Which file to save the genesis into? (default = devnet.json)
          > ./genesis.json(導(dǎo)出的路徑及文件名)

          OK,到這里創(chuàng)世json文件創(chuàng)建完成了

          第四步 geth命令初始化節(jié)點(diǎn)

          現(xiàn)在我們有了這個genesis.json文件,可以初始化創(chuàng)世塊了!

          進(jìn)入到geth安裝文件夾下執(zhí)行

          geth --datadir node1/ init genesis.json

          第五步 bootnode命令操作

          bootnode唯一的目的是幫助節(jié)點(diǎn)發(fā)現(xiàn)彼此(記住,以太坊區(qū)塊鏈?zhǔn)且粋€對等網(wǎng)絡(luò))

          初始化 bootnode

          bootnode -genkey boot.Key

          啟動bootnode服務(wù)

          bootnode -nodekey boot.key -addr:30310

          隨意使用任何您喜歡的端口,但請避免使用主流端口(例如HTTP)。30303用于公共以太坊網(wǎng)絡(luò)。

          第六步 geth命令啟動節(jié)點(diǎn)

          geth --datadir .\node1\ --syncmode 'full' --port 30311 --rpc --rpcaddr '127.0.0.1' --rpcport 8501 --rpcapi  'personal,db,eth,net,web3,txpool,miner' --bootnodes 'enode://ca88962dbcc8eb0c7587789866f21db68cdf32ad1ea890fe0d9f8fe010f7e9afe2e6a88d5c9d418be61a10b8a31b1e7c55213bb426dab91596ae36bd7d559333@127.0.0.1:30310' --networkid 666

          參數(shù)解釋:

          --syncmode 'full' 有助于防止錯誤丟棄錯誤的傳播塊
          --port 是node1的端口
          --rpcapi 允許RPC調(diào)用的模塊
          --bootnodes 要連接的bootnode
          --networkId genesis.json文件中的chainId

          第七步 與您的節(jié)點(diǎn)進(jìn)行交互

          通過RPC方式

          $ cd devnet
          devnet$ geth attach 'http://localhost:8501'
          Welcome to the Geth JavaScript console!

          instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9
          coinbase: 0x87366ef81db496edd0ea2055ca605e8686eec1e6
          at block: 945 (Sat, 10 Feb 2018 21:16:14 CET)
           modules: eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

          使用Geth控制臺

          >net.version
          "1515"
          > eth.blockNumber
          1910
          > eth.coinbase
          "0x87366ef81db496edd0ea2055ca605e8686eec1e6"
          > eth.sendTransaction({'from':eth.coinbase, 'to':'0x08a58f09194e403d02a1928a7bf78646cfc260b0', 'value':web3.toWei(3, 'ether')})
          "0x299a99baa1b39bdee5f02e3c660e19e744f81c2e886b5fc24aa83f92fe100d3f"
          >eth.getTransactionReceipt("0x299a99baa1b39bdee5f02e3c660e19e744f81c2e886b5fc24aa83f92fe100d3f")
          {
            blockHash: "0x212fb593980bd42fcaf3f6d1e6db2dd86d3764df8cac2d90408f481ae7830de8",
            blockNumber: 2079,
            contractAddress: null,
            cumulativeGasUsed: 21000,
            from: "0x87366ef81db496edd0ea2055ca605e8686eec1e6",
            gasUsed: 21000,
            logs: [],
            logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
            status: "0x1",
            to: "0x08a58f09194e403d02a1928a7bf78646cfc260b0",
            transactionHash: "0x299a99baa1b39bdee5f02e3c660e19e744f81c2e886b5fc24aa83f92fe100d3f",
            transactionIndex: 0
          }
          > exit(退出)


          來自:https://www.haowenbo.com/articles/2019/07/24/1563963176492.html

          posted @ 2019-11-28 17:08 狼愛上貍 閱讀(1050) | 評論 (0)編輯 收藏

          npm 如何查看一個包的版本信息?

          有了npm 我們能夠簡單的一段代碼就下載我們需要的包,但是包是不斷更新的,

          所以我們要關(guān)注包的版本信息;


          現(xiàn)在,假設(shè)我們需要  jquery ,但是jquery現(xiàn)在有很多版本,我們?nèi)绾瓮ㄟ^npm查看呢?

          要知道,現(xiàn)在的jquery包在npm服務(wù)器的上,我們使用下面的命令查看:

          第一種方式:使用npm view jquery versions

                              這種方式可以查看npm服務(wù)器上所有的jquery版本信息;

                              

          第二種方式:使用npm view jquery version

                              這種方式只能查看jquery的最新的版本是哪一個;

                              

          第三種方式:使用npm info jquery

                              這種方式和第一種類似,也可以查看jquery所有的版本,

                              但是能查出更多的關(guān)于jquery的信息;

                              



          假設(shè)現(xiàn)在我們已經(jīng)成功下載了jquery,過了一段時間,我忘記了下載的jquery的版本信息,

          這個時候,我們就需要查看本地下載的jquery版本信息,怎么做呢?

          第一種方式:npm ls jquery 即可(查看本地安裝的jQuery),下面我的本地沒有安裝jquery,

                              所以返回empty的結(jié)果;

                              

          第二種方式:npm ls jquery -g    (查看全局安裝的jquery)

                              

                            

          總結(jié):上面我們了解了如何通過npm 來查看我們需要的包的版本信息,

                     既可以查看遠(yuǎn)端npm 服務(wù)器上的,也可以查看本地的;
          ————————————————
          版權(quán)聲明:本文為CSDN博主「cvper」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
          原文鏈接:https://blog.csdn.net/cvper/article/details/79543262

          posted @ 2019-11-28 08:49 狼愛上貍 閱讀(201) | 評論 (0)編輯 收藏

          怎么更改npm全局安裝默認(rèn)路徑(C:\Users\Administrator\AppData\Roaming\npm\node_modules)

          1.在你想更改的目錄下新建兩個文件夾:node_global 和 node_cache

          2.啟動cmd依次執(zhí)行以下兩條命令

          npm config set prefix "XXX\XXX\node_global"

          npm config set cache "XXX\XXX\node_cache"

          路徑均為絕對路徑

          3.更改環(huán)境變量,計(jì)算機(jī)右擊 --> 屬性 --> 高級系統(tǒng)設(shè)置 --> 環(huán)境變量

          在下邊的系統(tǒng)變量里新建一條記錄,變量名為NODE_PATH 值為XXX\XXX\node_global\mode_modules

          在上邊的環(huán)境變量,更改PATH的值為XXX\XXX\node_global\

          (路徑為剛才第二步中node_global文件夾的絕對路徑)



          作者:招貓逗狗追兔子
          鏈接:https://www.jianshu.com/p/70ac7d1a3300
          來源:簡書
          著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

          posted @ 2019-11-24 14:38 狼愛上貍 閱讀(5113) | 評論 (0)編輯 收藏

          區(qū)塊鏈被神化的偽概念

          過去一年的熱門話題沒有什么比區(qū)塊鏈技術(shù)更火了,但這里面有太多被神話、誤解的地方,本文就詳細(xì)從技術(shù)層面、極客思維方式(哲學(xué))、社會學(xué)和經(jīng)濟(jì)學(xué)等多個維度的分析,來洞悉區(qū)塊鏈技術(shù)的背后真相。

            下筆之前我?guī)缀蹩催^了所有主流媒體上的各種區(qū)塊鏈文章,但我覺得沒有一篇寫的通俗易懂又全面。本文以論文的方式來闡述,雖然較長(可能閱讀要花15分鐘以上),不過看完后基本就能明白區(qū)塊鏈怎么回事,特別是對到底是不是應(yīng)該去投資虛擬貨幣會有更清晰的認(rèn)識。

            01 區(qū)塊鏈技術(shù)分析

            本節(jié)以比特幣為例來說明區(qū)塊鏈技術(shù),如果你對技術(shù)不感興趣,直接跳到02章節(jié)繼續(xù)閱讀,只需要知道結(jié)論:區(qū)塊鏈就是用來實(shí)現(xiàn)一個虛擬貨幣記帳本,擁有比特幣就是在這個帳本里面擁有區(qū)塊里面的若干條數(shù)據(jù)記錄。

            1.1 問題

            現(xiàn)在的區(qū)塊鏈可能出了很多衍生的所謂新技術(shù)架構(gòu),但最終還是離不開那個不可修改的區(qū)塊結(jié)構(gòu)設(shè)計(jì),所以這一節(jié)就以比特幣來說明這些底層技術(shù)架構(gòu)。看完這節(jié),至少你能夠解決以下疑惑:

            用普通話和別人講清楚比特幣的底層技術(shù)架構(gòu)是什么?區(qū)塊鏈?zhǔn)且环N最近才被發(fā)明出來的新技術(shù)嗎?

            挖礦是怎么一回事?

            比特幣的交易過程如何?

            比特幣錢包和比特幣是什么關(guān)系?

            1.2 計(jì)算機(jī)不是前沿科學(xué)

            這有一個打假重要法則,鼓吹任何形式的單純的計(jì)算機(jī)技術(shù)多么神奇的文章,都要打一個大大的問號。

            現(xiàn)在所有計(jì)算機(jī)都是圖靈機(jī),而圖靈提出圖靈機(jī)的論文都快100來年了。計(jì)算機(jī)領(lǐng)域不是所謂前沿科學(xué),而是一種能大幅提高人們工作效率的工具。所以在信息領(lǐng)域,把從業(yè)人員也稱為軟件工程師、硬件工程師、IOS開發(fā)工程師和測試工程師等等。

            目前區(qū)塊鏈技術(shù)和人工智能這二項(xiàng)技術(shù)已經(jīng)被專家們吹到天上去了,我今天就先把區(qū)塊鏈這層皮高科技的皮給扒了,以后有機(jī)會我再扒人工智能的。

            其實(shí)不管哪種計(jì)算機(jī)領(lǐng)域的技術(shù)都由二樣?xùn)|西組成:數(shù)據(jù) 和 算法。

            就拿人工智能來說,其實(shí)就是統(tǒng)計(jì)學(xué)在計(jì)算機(jī)的應(yīng)用,吹的神乎其神的阿發(fā)狗在原理上其實(shí)就是蒙特卡洛樹 + 基于貝葉斯網(wǎng)絡(luò)的DeepMind,不過DeepMind取了個很牛的名字叫神經(jīng)網(wǎng)絡(luò)。

            當(dāng)然知道原理和能做出來是完全不一樣的,和很多工程建設(shè)一樣,需要對應(yīng)的很多基礎(chǔ)平臺和優(yōu)秀的工程師,但歸根結(jié)底是一個工程問題,不是科學(xué)問題。

            舉這個例子只是想說明,沒有必要去神話一項(xiàng)軟件技術(shù),計(jì)算機(jī)領(lǐng)域和很多傳統(tǒng)的行業(yè)一樣都是工程問題,甚至可能在工程管理水平上面還不如高鐵和大型橋梁建設(shè)。

            1.3 比特幣的數(shù)據(jù)結(jié)構(gòu)

            比特幣底層數(shù)據(jù)結(jié)構(gòu)非常簡單,是只要學(xué)過一點(diǎn)點(diǎn)計(jì)算機(jī)的人都懂的鏈表,特殊在用算法實(shí)現(xiàn)了不可修改只能往后追加。塊與塊之前就是鏈表結(jié)構(gòu),塊內(nèi)部是一個特殊的二叉樹(Merlin Tree)結(jié)構(gòu),存了交易的流水信息。至于每一塊里面的具體數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)非專業(yè)人員都不要去了解,只要知道想要修改區(qū)塊的數(shù)據(jù)非常的難,因?yàn)橹斜韭斣O(shè)計(jì)的非常巧妙,想要修改塊的內(nèi)容,要將從此塊之后所有的內(nèi)容全部進(jìn)行修改。

            至于如何做是如何做到的,防止被修改,我在下一節(jié)的算法中會詳細(xì)介紹。

            (區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)還有NextHash沒有在圖上畫出來)

            看到這個表結(jié)構(gòu),如果你產(chǎn)生一個疑問,鏈條總歸要有開始吧?這個問題非常好,我開始也產(chǎn)生過這個問題。中本聰?shù)慕鉀Q方案是在程序內(nèi)部內(nèi)置了一個創(chuàng)世塊,中本聰本人就是創(chuàng)造比特幣的上帝,然后啟動后只要還有一臺計(jì)算機(jī)在運(yùn)行這個程序,塊的生成就不會結(jié)束。

            還有另一個分布式數(shù)據(jù)保存特性,也讓修改數(shù)據(jù)變得幾乎不可能,因?yàn)檫@個數(shù)據(jù)不光存在某一個人的機(jī)器上的,保存在很多臺的機(jī)器上,這個應(yīng)該成為了比特幣故事最大的亮點(diǎn)。

            但其實(shí)物極必反,在選擇了開放和安全外,必然犧牲效率。因?yàn)樵诒忍貛爬锩娌荒苤苯硬樵冇囝~的,你只能順著鏈條從頭開始查找所有交易記錄,然后再進(jìn)行加減計(jì)算,得到你當(dāng)前的余額,這就讓比特幣的效率不可能高。

            只要知道區(qū)塊ID,很多網(wǎng)站都是可以查對應(yīng)區(qū)塊的信息的,因?yàn)閿?shù)據(jù)是公開的嗎。具體我查了一下,btc.com這個礦池其中一個ID的余額,不少有1534呢。

            https://blockchain.info/address/1C1mCxRukix1KfegAY5zQQJV7samAciZpv

            1.4 基于區(qū)塊鏈的文本編輯器

            這里用一個比喻就能講明白這個結(jié)構(gòu)的特點(diǎn)了,好比A君用Word在寫一份文檔,每輸入的一個字都要同步給P2P網(wǎng)絡(luò)上的所有結(jié)點(diǎn),增加也好刪除也好都要上傳,然后文章的最終稿是不直接保存的,就相當(dāng)不能直接查詢余額。要得到A君的文章也很簡單,把A君所有的操作全部找出來執(zhí)行一次就是最終的結(jié)果了。

            網(wǎng)絡(luò)上當(dāng)然同時也有B君,C君在輸入,還是那個鏈?zhǔn)浇Y(jié)構(gòu),按先后順序按:誰操作 + 操作內(nèi)容,依次首尾相連串好。如果你想做區(qū)塊鏈創(chuàng)業(yè),用這個區(qū)塊鏈的文本編輯器寫個計(jì)劃書,制作一個區(qū)塊鏈編輯器,將作者的寫作過程全程記錄,說不定也能搞到融資,各位隨意拿走不用算我發(fā)明。

            當(dāng)然比特幣的區(qū)塊鏈?zhǔn)翘摂M幣交易,顯然不能是個人單獨(dú)行為,得按交易的形式出現(xiàn),理解也簡單,就是被執(zhí)行的主體是多個對象,按交易規(guī)則來進(jìn)行就可以,這個我放到交易里面來詳細(xì)說明。

            那區(qū)塊鏈?zhǔn)侨绾伪WC安全的呢?這就要看下一小節(jié)的算法部分。

            1.5 算法

            用到的算法也沒有特別高深的算法,就二個算法:橢圓曲線加密算法和哈希算法。這二個算法一直在互聯(lián)網(wǎng)上被廣泛使用,幾乎所有的語言都有函數(shù)庫都有。

            二種算法的原理網(wǎng)上非常多,這里只介紹作用,第一種非對稱加密,這個算法有下面這種能力。

            公開公鑰(Public Key),自己保存私鑰(Private Key),只有私鑰加密過的內(nèi)容才能被公鑰打開。

            用普通話打個形象的比喻,我給你一把鑰匙,然后讓你開鎖,這把鑰匙能打開的鎖就是我造出來的,而且只有我才能造出來。和我們平時的生活習(xí)慣有點(diǎn)不一樣對,這個算法的學(xué)名叫:橢圓曲線加密算法。

            在區(qū)塊鏈里面,公鑰字符串就是比特幣帳戶,長這個樣子(Base58編碼過):1C1mCxRukix1KfegAY5zQQJV7samAciZpv 。

            還有另一個叫哈希算法,這個算法有三個特性:

            1、輸入的值差別很小,但輸出卻完全不一樣。

            2、不管輸入多少位,輸出的位置能固定。

            3、知道輸出,很難還原輸入。(有中國數(shù)學(xué)家曾經(jīng)研究過如何求解輸入,但256位的計(jì)算量太大)

            有個網(wǎng)站可以試:Lhttps://www.md5hashgenerator.com/ 。比如我MikeZhou和MikeZhou1只差一個數(shù)字,但結(jié)果完全不同。大家可以上這個網(wǎng)站自己嘗試。

            MD5(MikeZhou)=cb19e9b0b3cb8a8e5126677dbe1dbad5

            MD5(MikZhou1)=48cc0cd823192ea7bd0aa5f1e60cfdf0

            MD5是Hash算法一種,而比特幣用了Double-Hash,就是連續(xù)二次SHA的哈希(叫 SHA256d),就是要防止暴力破解求解輸入。

            好了,有了數(shù)據(jù)結(jié)構(gòu)和算法的基本,我們就很容易講清楚挖礦的過程。

            1.6 挖礦過程

            挖礦其實(shí)就是一直在做非常無聊但很有難度的事情,這是中本聰精通博弈論的地方了,這個設(shè)計(jì)讓比特幣幾乎可以永遠(yuǎn)的活下去。

            挖礦其實(shí)就是大家事先約定的一個猜迷游戲。謎底規(guī)則大家事先約定,就是不停的試一串特殊的Hash值,加入的計(jì)算的人越多,就就越特殊越難找到。

            這里我們要知道的就是:

            1、規(guī)則大家都知道。

            2、誰也不能提前開始,大家開始時間一致。

            3、沒有投機(jī)取巧的辦法,只能硬算。

            4、贏者通吃。

            然后就是比誰算的快還有運(yùn)氣好,然后誰先算出來,直接廣播給所有的結(jié)點(diǎn),所有結(jié)點(diǎn)一驗(yàn)算符合規(guī)則,就不再算這一塊的了。

            贏的ID將得到:

            1、系統(tǒng)約定好的獎勵的特定數(shù)量比特幣(最開始是50,目前是12.5,每4年減半);

            2、所有在交易內(nèi)的交易費(fèi)用。

            與之相應(yīng)的義務(wù):

            1、負(fù)責(zé)寫入生成的當(dāng)前塊。按比特幣的規(guī)則約定,先算出來的人才能發(fā)起寫入指令。

            因?yàn)橛薪灰踪M(fèi)用存在,所以礦工們肯定要按正常規(guī)則來操作,因?yàn)殄e誤的東西本身不會被其它結(jié)點(diǎn)執(zhí)行,而且還白白損失交易費(fèi)用的。

            中本聰在這一塊的設(shè)計(jì)可以堪稱是天才設(shè)計(jì),當(dāng)挖的人多了的時候,計(jì)算難度就會自動加大,對比下面的圖一張2009年的,還有一張是今年的,你發(fā)現(xiàn)差了好多個0,對這就是難度增加導(dǎo)致。因?yàn)樯系郛?dāng)年設(shè)計(jì)的規(guī)則是,要讓SHA256d(時間,上一塊Hash,隨機(jī)數(shù))的結(jié)果要符合規(guī)定個0開頭才行,如果說生成的數(shù)字是隨機(jī)的。

            概率 = (1/16) ^ N 【其中N = 要求0的個數(shù)】

            2009年的數(shù)據(jù)是8個0

            2018年2月的數(shù)據(jù)是18個0

            那么現(xiàn)在挖礦的難度是當(dāng)年比特幣新出來的時候約1,099,511,627,776倍,當(dāng)然這里面有技術(shù)進(jìn)步的因素,從CPU到GPU,再到FPGA,到現(xiàn)在的ASIC,ASIC也不斷從60nm到現(xiàn)在的14nm,越來越快。

            而這也是比特幣一直被詬病的地方,空轉(zhuǎn)消耗大量的電力,1800萬Th/s,按現(xiàn)在最新型的機(jī)器礦機(jī)規(guī)格:消耗2度電/小時產(chǎn)生13.5Th/s算力來算。

            年耗電量 = 1800萬 / 13.5 * 2 千瓦時/小時 * 24 小時 * 365天 = 233.6 億度。

            而且我是按最新的節(jié)能型的機(jī)器計(jì)算的,還沒有計(jì)算機(jī)房制冷消耗,所以整個電力算下來,基本相當(dāng)半個三峽的發(fā)電量。

            下面是一張總體的算力圖,一直在增加,這也從側(cè)面說明在當(dāng)前比特幣價值情況下,礦工的經(jīng)濟(jì)收益為正,礦機(jī)之前賣脫銷也是因?yàn)檫@個原因?qū)е隆?/p>

            當(dāng)然大家知道贏者通吃的規(guī)則后,那么這樣的話,大家的收益不就是波動很大嗎?有人投入了幾千萬在這里面,為了投資回報(bào)的穩(wěn)定,所以就是礦池的產(chǎn)生,就是大家組團(tuán)來挖,挖好了按一個約定好的規(guī)則來分幣。

            下面就是一個算力的分布圖,可以看出前3家的占比超過60%了。

            1.7 交易過程

            這里單純以比特幣的交易來說明區(qū)塊鏈的交易過程,不涉及商業(yè)上的交易(錢的交換)。

            比特幣的交易,有了上面數(shù)據(jù)結(jié)果和算法基本就非常安全了。鏈表結(jié)構(gòu)和算法就是構(gòu)建一個受大家共同監(jiān)督安全的不可逆的數(shù)據(jù)流,基本如下圖所示,小k到大K橢圓加密不可逆,大K到A的SHA256d的也不可逆,雙重保證,基本在現(xiàn)有的計(jì)算機(jī)構(gòu)架下是破解是不可能的。

            就算哪天有一個礦池?fù)碛辛?1%的算力資源,最多有可能壟斷挖礦的權(quán)利(這是有可能的,后面經(jīng)濟(jì)分析詳細(xì)說明),不可能來任意修改數(shù)據(jù),這樣就完全不是比特幣了,失去了最初的意義,也就會變成一文不值。

            當(dāng)然為了進(jìn)一步安全,中本聰在設(shè)計(jì)之初還制訂了很多其它細(xì)的規(guī)則,比如:

            1、礦工剛挖出來的礦是不能馬上交易,因?yàn)殡x當(dāng)前塊越遠(yuǎn)的數(shù)據(jù)越安全。

            2、利用交易費(fèi)來調(diào)節(jié),優(yōu)先早生成和交易的比特幣交易。

            有了上面的基礎(chǔ)那么交易過程就變得非常簡單,交易中有以下參與方:

            1、剛才猜出謎底的礦工:負(fù)責(zé)校驗(yàn)交易和寫入交易,并收取交易費(fèi)。

            2、其它分步式結(jié)點(diǎn):負(fù)責(zé)同步和確認(rèn)交易正確性。

            3、出售方:提供自己的私鑰加密的數(shù)據(jù),用私鑰就證明了是擁有方發(fā)起的交易。

            4、接受方:產(chǎn)生和自己關(guān)聯(lián)的收入交易記錄。

            歸根結(jié)底,這么多操作就是往區(qū)塊中填入數(shù)據(jù),不涉及任何商品和錢的交易,貨幣交易是區(qū)塊鏈在虛擬貨幣交易所的衍生交易。暫且記住這個結(jié)論,后面經(jīng)濟(jì)分析時使用。

            比特的區(qū)塊鏈交易 ≠ 貨幣交易

            當(dāng)然實(shí)際的流程控制比這個復(fù)雜,因?yàn)楸忍貛胚^于火爆,而開放的分布式天然并發(fā)又不夠。所以礦工們研發(fā)了交易池,算是BIP計(jì)劃的一部分吧。相當(dāng)去醫(yī)院看病,醫(yī)生數(shù)量有限,病人多,大家先全在大廳等著,然后醫(yī)院結(jié)合看病時長和給的診療費(fèi)來計(jì)算先給誰看。

            這里比喻的看病時長,交易費(fèi)由交易方在交易前自己輸入,交易“稱重公式

            = 148 * number_of_inputs + 34 * number_of_outputs + 10

            1.8 比特幣錢包

            有了上面的介紹,一句話就能講清楚比特幣錢包,其實(shí)就是上面算法里面講的那個公鑰,所以錢包這個概念在區(qū)塊鏈中并不單獨(dú)存在,而是保存在一條條的交易記錄里面。

            因?yàn)槎际且恍]有任何意義的數(shù)字,大家使用起來比較麻煩,于是就誕生了很多比特幣錢包管理程序,但這里有一個安全隱患,如果你自己不知道如何在自己本地生成錢包,而是利用網(wǎng)站去生成公私鑰,理論上網(wǎng)站都有可能把你的私鑰保存一份,當(dāng)你帳戶(通過公鑰直接查找,數(shù)據(jù)公開的)有比較多錢的時候,要面臨怎樣的風(fēng)險(xiǎn)誰也不知道。

            當(dāng)然只輸入公鑰在錢包程序里,是沒有安全隱患的,可以很方便查找自己的交易記錄和余額。

            一言以蔽之,比特幣錢包是人們虛擬出來的一個詞,在區(qū)塊數(shù)據(jù)中其實(shí)就是公鑰。而很多錢包程序就是為了方便一些沒有技術(shù)能力的人,讓他們方便的進(jìn)行虛擬貨幣的交易。

            但這里真的給一些正在大額投資虛擬貨幣的人提個醒,如果不是自己本地生成的公私鑰,還真的要當(dāng)一萬個心。私鑰的保存非常重要,真要丟了,可不是打個客服電話就能要回來的,它就真的永遠(yuǎn)消失了。

            1.9 P2P網(wǎng)絡(luò)技術(shù)

            這個就是大家以前用過的BT和VeryCD電驢下載,用的技術(shù)是一樣的。這個技術(shù)就是實(shí)現(xiàn)去中心化的網(wǎng)絡(luò)傳輸算法,我把網(wǎng)絡(luò)交換部分也稱之為算法。

            所以,我們發(fā)現(xiàn)區(qū)塊鏈的關(guān)鍵技術(shù)是十幾年前就流行過的技術(shù),如果真是什么顛覆性的技術(shù),不會雪藏這么久不出招的。

            1.10 金融應(yīng)用

            我2017年就深入調(diào)查過區(qū)塊鏈技術(shù),主要是看看對我們金融行業(yè)有沒有一些新的啟發(fā),調(diào)查完發(fā)現(xiàn)沒有什么作用后就擱置在一邊了。今天看到身邊好多朋友都想去炒把幣,所以出來寫這個文章。

            為什么說沒有用呢?

            信任問題:通過電子合同解決了。金融行業(yè)用CFCA認(rèn)證過的合同是有法律效應(yīng),而且也做到了不可篡改。

            合規(guī)問題:只要企業(yè)能提供借款人的按法律要求的一些證明文件,事先收集保存到時候提供就可以,一些影相文件和簽字文件,這個用不用區(qū)塊鏈存不關(guān)鍵。

            借款數(shù)據(jù):法院不看企業(yè)提供的數(shù)據(jù)作為證明關(guān)鍵的數(shù)據(jù),都是以銀行提供的流水為準(zhǔn)確,A是不是從企業(yè)借款,是看銀行是不是有打款記錄,不看企業(yè)數(shù)據(jù)庫或區(qū)塊鏈中保存的數(shù)據(jù)的。

            因?yàn)楹贤豢纱鄹模钟秀y行流水記錄,證據(jù)非常完善,至于去中心化,那更是完全搭不上邊,哪有我們公司的數(shù)據(jù)完全對外公開的道理。

            1.11 技術(shù)總結(jié)

            區(qū)塊鏈其實(shí)并不是用了什么新的技術(shù),但將已有的一些技術(shù)進(jìn)行組合,給人們一種全新的用技術(shù)來實(shí)現(xiàn)一個安全和互信的產(chǎn)品,加上恰逢金融危機(jī)后推出,運(yùn)氣不錯,所以有了今天的地位。

            但光了解技術(shù),還是不足于讓我們明白中本聰設(shè)計(jì)區(qū)塊鏈的初衷。我們應(yīng)該去了解創(chuàng)造區(qū)塊鏈背后的極客們的哲學(xué)思想,這樣就不至于去犯拿著錘子到處找釘子的錯誤。

            02 技術(shù)極客的自由烏托邦

            這一節(jié)將嘗試從哲學(xué)層面來分析,創(chuàng)造比特幣的技術(shù)極客們,如何用自己擅長的技術(shù)領(lǐng)域,按他們的世界觀和價值觀構(gòu)建出一個虛擬世界。

            2.1 新時代的烏托邦

            歐洲歷史是就出現(xiàn)過多次烏托邦思潮,提倡無政府主義,現(xiàn)在同樣還有人保有這種思想,但遺憾的是目前也有一些小島是無政府狀態(tài),但基本是過著在原始人的生活。

            而區(qū)塊鏈最大的特性就是去中心化和開放,這給人一種自由的享受,并且用一系列的技術(shù)手段在開放的同時還保證了安全。這就等于構(gòu)建了一個開放自由并且還保護(hù)私有產(chǎn)權(quán)的新互聯(lián)網(wǎng)模式,難怪這會讓一些大人物們歡呼區(qū)塊鏈的時代的到來,而中本聰把第一塊命名為創(chuàng)世塊,也表明也自己希望成為新時代的上帝。

            2.2 自由的基因

            自由人文主義在西方經(jīng)歷了幾百年,從圣奧古斯丁思想提出,到現(xiàn)在成為歐美等國家的主要哲學(xué)思想。以致于丹尼爾·漢南最近寫的《自由的基因》里面說自由是盎格魯圈的基因。

            當(dāng)看到這個新的去中心化的區(qū)塊鏈技術(shù)出來以后,又讓一些人內(nèi)心持有自由主義觀念的人,終于看到一個完全無政府(去中心化)的烏托邦社會(比特幣)的誕生和崛起。這其實(shí)非常符合一些出生在中國,受美國教育以及長期生活在美國的名人的價值觀。比如:大科學(xué)家張首晟、硅谷投資人吳軍等,他們覺得這是互聯(lián)網(wǎng)的分水嶺來臨。

            他們當(dāng)然是我非常尊重的人,在自己的專業(yè)領(lǐng)域有非凡的成就,是我不能比的。但就區(qū)塊鏈技術(shù)的研究,未必有我深入,至少我相信他們沒有時間去Github上下載過C++的區(qū)塊鏈源碼來看。但之所以最說區(qū)塊鏈被這些專家夸大了,不是因?yàn)槲铱戳嗽创a,而是因?yàn)槲疫€做過一些哲學(xué)上的分析。

            2.3 自由主義的哲學(xué)發(fā)展

            就算我們從哲學(xué)的歷史來一步步推導(dǎo),絕對的自由最后就是必然產(chǎn)生強(qiáng)權(quán),而從現(xiàn)在的比特幣來看,也是一樣的,算力最強(qiáng)的擁有交易寫入權(quán),最后受益方一定是那些強(qiáng)制的一方。

            我畫了一張自由的哲學(xué)發(fā)展史,從笛卡爾提出我思故我在,把人從上帝的附庸中提拔出來以后,到最后黑格爾的強(qiáng)權(quán)即公理,到最后尼采的強(qiáng)者邏輯直接給希特勒屠殺猶太人找到了理由。而在受黑格爾和尼采的思想影響下,也直接導(dǎo)致德國發(fā)動二次世界大戰(zhàn)。

            反觀二戰(zhàn)后,美國的就是用馬歇爾的政策,用的是老子的思想“夫唯不爭,故天下莫能與之爭”,主動犧牲自己利益,扶持歐洲和日韓的發(fā)展,當(dāng)這些國家發(fā)展了反過來又進(jìn)一步促進(jìn)了美國的發(fā)展,才有了今天美國霸主的地位。

            講這些哲學(xué)邏輯就是想說明一個道理,絕對的自由產(chǎn)生強(qiáng)者權(quán)利。完全的去中心化,大家完全按既定規(guī)則的投票(比特幣現(xiàn)在邏輯),拿區(qū)塊鏈最火應(yīng)用虛擬貨幣來說,最后就會形成幾大礦池,幾大交易所,他們就是虛擬貨幣領(lǐng)域的無形的希特勒,決定著各種BIP(比特幣改進(jìn)計(jì)劃)向他們有利的一方游走,而小散投資者們就是他們的韭菜。

            如果認(rèn)為這種完全不受政府監(jiān)管,最后都是強(qiáng)者恒強(qiáng)的形式是互聯(lián)網(wǎng)的未來,那可能我們就得同意張首晟所說的目前形式的區(qū)塊鏈條是互聯(lián)網(wǎng)分岔。

            2.4 除虛擬幣貨并無大的區(qū)塊鏈應(yīng)用

            再從結(jié)果來看,這么重大的技術(shù),區(qū)塊鏈至少被這些專家講了5年以上了。我們現(xiàn)在除了看到大家在熱火朝天在炒幣以外,身邊沒有看到任何一個大型的應(yīng)用是用區(qū)塊鏈實(shí)現(xiàn)的。

            如果真是一個革命性的任務(wù),我想Google,F(xiàn)acebook和BAT公司怎么可能這么多年還沒有具體的應(yīng)用呢?

            如果您剛才認(rèn)真看完了技術(shù)篇幅的加構(gòu),便知道區(qū)塊鏈不過是:P2P網(wǎng)絡(luò) + 鏈表 + 二種通用加密算法,這幾樣?xùn)|西的組合,完全不足于顛覆現(xiàn)有互聯(lián)網(wǎng),現(xiàn)在很多大公司不用不是因?yàn)椴恢篮筒涣私狻6且驗(yàn)楝F(xiàn)實(shí)在有更好的技術(shù),比如分布式關(guān)系型數(shù)據(jù)庫(如Mysql),分布式緩存,分布式消息隊(duì)列和分布式文件存儲等。

            不管怎么改進(jìn)區(qū)塊鏈技術(shù),都是不可能實(shí)現(xiàn)幾億用戶20萬/秒的交易記錄的(支付寶2017雙11的記錄)。

            這些技術(shù)本身都是分布式的,部署在不同機(jī)器上,但同時又實(shí)現(xiàn)了中心化的管理,這里面技術(shù)難度要遠(yuǎn)遠(yuǎn)大于區(qū)塊鏈的技術(shù)難度。

            當(dāng)然還有其它一些利益相關(guān)的區(qū)塊鏈的支持者,我就一個觀點(diǎn),如果他鼓吹的東西對自身利益有非常重大的關(guān)系,不管他講的如何真誠都可以忽略。非常簡單的道理,若真是好東西,會公開的告訴你嗎?

            所以像李X來,薛XX等,比如從事區(qū)塊鏈創(chuàng)業(yè)圈的人,都不算是區(qū)塊鏈支持者,應(yīng)該說是虛擬貨幣的支持者,其目的就不用我來告訴大家了。

            2.5 技術(shù)現(xiàn)狀

            想想比特幣到今天,絕對超出中本聰當(dāng)初建設(shè)他的目的,每天消耗大量的能源,讓其成為人類新時代的“郁金香”。

            03 新時代“郁金香”

            這一節(jié)從社會學(xué)角度來簡單分析虛擬貨幣的現(xiàn)象。

            3.1 想象共同體

            前文提到了虛擬貨幣是新時代的“郁金香”,這是經(jīng)過自己的一些分析的。就像赫拉利在《人類簡史》中提到智人最大的進(jìn)步來自7萬年前的一些基礎(chǔ)突變,讓人具有了講故事了能力。這樣大家不斷的通過講故事,就形成了共同的社會習(xí)俗,形成了各自的文化和社會關(guān)系。

            如今的比特幣不就是完全是大家的一個想象共同體嗎?想象共同體有沒有意義?當(dāng)然有意義,國家和民族不都是想象的共同體嗎?這個共同體的意義就要看其給我們實(shí)際帶來了哪些價值。國家和民族給我們帶來什么價值,就不用過多的闡述。

            那么比特幣和交易帶來了什么現(xiàn)實(shí)的意義嗎?直接替代現(xiàn)有的支付寶,這是一種舍近求遠(yuǎn)的行為。目前的用虛擬貨幣來實(shí)現(xiàn)的支付都是要轉(zhuǎn)換成美元或其它法定貨幣來支付給商家的,這不說等于饒了一個圈子嗎?

            虛擬貨幣也好,實(shí)際貨幣的價值也好,一個很重要的作用就是交換和流通的。

            3.2 虛擬貨幣價值

            虛擬貨幣中最大的一家比特幣,最后還是要通過銀行卡來進(jìn)行交易,但價格波動太劇烈。雖然有一些技術(shù)型公司愿意接受比特幣作為支付手段,但賣的肯定是虛擬產(chǎn)品,比如Steam和一些游戲公司,這些公司虛擬對虛擬還是挺對路的,反正公司不會虧。

            但凡是有成本的交易,比如蘋果公司賣手機(jī),試試用比特幣結(jié)算看看,價格一波動,到時候連供應(yīng)商的貨款都付不出。

            還有一個最大的問題,安全性完全沒有保障。就拿個人來說,試想你把你所有的錢全換成比特幣,你每天睡覺都提心掉膽,放電腦存著吧怕被盜,抄本本上吧怕丟,記吧還又記不住。

            如果一家公司呢?所有資產(chǎn)就是一串完全沒有保障的數(shù)字,誰保管著私鑰馬上人間蒸發(fā)。

            當(dāng)然支付者們可以講,可以不斷改進(jìn)嗎?對是可改進(jìn)。但要做到安全穩(wěn)定不波動,不就是等于重新把現(xiàn)代金融體系重新在虛擬世界重構(gòu)一次嗎?最后不就又演變成現(xiàn)代的金融制度嗎?

            所以我才會說想通過區(qū)塊鏈技術(shù)來構(gòu)建一個自由的金融社會是一種烏托邦的設(shè)想罷了。

            這就很容易得出結(jié)論,數(shù)字貨幣不過就是一個沒有實(shí)際價值的“想象共同體”,和當(dāng)年的荷蘭“郁金香”最大的區(qū)別是當(dāng)年“郁金香”只在荷蘭流行。但今天虛擬幣貨通過更新的技術(shù)和更強(qiáng)的傳播手段,傳播到了全世界,所以這一波應(yīng)該會漲得更高更持久一些,但泡沫終歸還是要破滅的。

            04 誰是贏家

            這一節(jié)就要嘗試回答,在當(dāng)前的區(qū)塊鏈大環(huán)境下,哪些人是受益方。

            區(qū)塊鏈的生態(tài)圈包括哪些角色?

            虛擬貨幣會發(fā)展成為支付寶那樣的貨幣嗎?

            挖礦的經(jīng)濟(jì)價值如何?

            

            4.1 區(qū)塊鏈的生態(tài)圈

            我們來看看區(qū)塊鏈生態(tài)圈有哪些角色,我們就只羅列直接關(guān)系者,背后的供應(yīng)鏈不在一一列舉了。

            炒幣者

            早期進(jìn)行的一些人應(yīng)該有不少賺錢了,但小散們不可能賺太多,后面我分析原因,現(xiàn)在進(jìn)去的基本都是韭菜。

            礦工

            投資者,存在一定風(fēng)險(xiǎn),但追求的是穩(wěn)定的回報(bào)。

            礦機(jī)供應(yīng)商

            目前各種礦機(jī)供不應(yīng)求,應(yīng)該是這波區(qū)塊鏈的受益者。

            礦池所有者

            大的礦池所有者,挖礦得到的交易費(fèi)是不分成的,所以應(yīng)該是較大的受益者。

            虛擬貨幣交易所

            食物鏈的頂端,收割者,不要任何金融牌照,上一個新幣就收幾千萬,反正人傻錢多,不管上什么都有人買,不怕沒韭菜。

            技術(shù)開發(fā)者

            賺口飯錢,干什么不是干,不過干了區(qū)塊鏈,工資能比其它人高點(diǎn)。

            虛擬貨幣發(fā)行者

            早期的發(fā)行者,早已身價不可估量。如今也是賺個微利,還有可能賺的錢不夠付交易所的上幣費(fèi)。

            區(qū)塊鏈創(chuàng)業(yè)者(除虛擬貨幣從業(yè)者以外)

            我非常崇拜的一群人,雖然大部分人是拿錘子在到處找釘子,但是有情懷,說不定會找到一些新的業(yè)務(wù)模式,但應(yīng)該不是什么顛覆性的。

            4.2 礦池的正經(jīng)濟(jì)利益

            我本來還想自己統(tǒng)計(jì),結(jié)果有人做了一個網(wǎng)站,專門顯示各種挖礦的經(jīng)濟(jì)利益。網(wǎng)址在這里:https://www.coinwarz.com/cryptocurrency/

            能看出來挖比特幣不是目前經(jīng)濟(jì)價值最高的,現(xiàn)在要挖萊特幣。對不起,比特幣礦機(jī)和萊特幣礦機(jī)不同,不能說不挖比特幣去挖萊特幣,當(dāng)然這個里面受實(shí)際價格的影響,但總體來說是賺錢的,但請注意這是對于大的礦池和大的礦廠。

            由于比特幣去年的快速上漲,而礦機(jī)的供應(yīng)有點(diǎn)落后,但隨著價格的回落和礦機(jī)的供應(yīng)到位,這個市場的經(jīng)濟(jì)利潤馬上會歸于零。

            4.3 投資礦機(jī)價值

            對于交易所和大礦池的擁有者,當(dāng)然毫無疑問,他們會想方設(shè)法自己或者買通其它人發(fā)出各種虛擬貨幣才是未來的新經(jīng)濟(jì),區(qū)塊鏈會顛覆現(xiàn)有互聯(lián)網(wǎng)這樣的言論。

            對于很多小散投資者,可能買個幾臺幾十臺礦機(jī)放家里,然后再自己順便炒一炒,想著自己的發(fā)財(cái)夢,我先從經(jīng)濟(jì)規(guī)律上來分析小礦工們賺不到錢的道理。

            學(xué)過經(jīng)濟(jì)學(xué)的都應(yīng)該知道下面的成本曲線,當(dāng) R(收入)=ATC,大家不再買新的礦機(jī),當(dāng)R(收入)< AVC (電費(fèi)+人工費(fèi)+其它運(yùn)營費(fèi)用)。

            根據(jù)經(jīng)濟(jì)規(guī)率:只要經(jīng)濟(jì)利潤為正,就會不斷的有新加入者,直到最后經(jīng)濟(jì)利潤為零,但不同的礦工由于成收入和成本各不相同,當(dāng)?shù)V池們?yōu)榱愕臅r候小礦主們可就早就變成負(fù)的了。

            作出上面的判斷,主要有由于下列原因:

            1、小礦工的規(guī)模化原因,礦機(jī)的運(yùn)行效率肯定不如大礦廠,這樣R收入會低。

            2、小礦工采購批量小,平均固定成本會高于大礦廠。

            3、小礦工電力平均成本和運(yùn)營成本可能都會高于大礦廠。

            4、小礦工無法得到交易手續(xù)費(fèi)分成(目前是這樣)。

            基于以上分析,可以得出結(jié)論:投資了小規(guī)模的礦機(jī)最終會因?yàn)橐?guī)模效應(yīng)虧損。當(dāng)然如果運(yùn)氣好遇到比特幣一起漲,那這樣也別折騰,直接買不就好了嗎?

            那我就再來分析下直接投資的價值。

            4.4 小散投資虛擬貨幣的價值

            首先,有一件事實(shí)必須承認(rèn),虛擬貨幣本身是一段數(shù)據(jù),數(shù)據(jù)被加密來加密去存在多少塊硬盤上,除了被炒來炒去,用來真實(shí)商品交易非常少,而且使用起來也非常麻煩,可以說本身不創(chuàng)造任何價值(當(dāng)然不是說貨幣不產(chǎn)生價值,貨幣最直接的價值就是降低交易成本,而比特幣卻不是)。再次強(qiáng)調(diào),不創(chuàng)造價值不代表沒有價值,只要人們認(rèn)為他有價值他就能賣得了。正是因?yàn)檫@個原因,現(xiàn)在各種虛擬貨幣才這么火。

            用下面的圖來形像的說明吧,比特幣的錢都來自投資者的投入,那么投入的可能是在這的高度,除了付給發(fā)行者收益,交易所收的手續(xù)費(fèi)還有礦工的成本,那么進(jìn)入的錢,等出來時可能只剩一半了。

            以最近24小時比特幣的數(shù)據(jù)來說,24小時的交易量是20億美金,算1%的交易費(fèi)(交易所直接收的現(xiàn)金)。再以1萬美金/BTC來計(jì)算,每天挖出還有礦再加上收走的比特幣交易費(fèi),共計(jì)2000個比特幣左右。當(dāng)這二項(xiàng)的收費(fèi)就4000萬美金/天,再加上被那些創(chuàng)始人賺走的,每天至少在5000萬美金以上的凈支出。

            這就相當(dāng)投一塊錢進(jìn)去,5毛錢出來,然后我們還想信我在這個市場能賺大錢。

            這里有一個概念一定要搞清楚,這里無關(guān)比特幣漲跌,比特幣的量是按其規(guī)則運(yùn)行不會變化。但因?yàn)楸忍貛挪粍?chuàng)造價值,而法定貨幣的平衡和幣的漲跌是沒有關(guān)系的,相差5000萬一天這是一個實(shí)際貨幣上的平衡。而這個市場又有人不斷的在抽取價值,那么就要靠不斷的更多的投資加入才能維持市場的繁榮。

            4.5 如何解釋那些財(cái)富自由的人

            有一些,極少數(shù)沒錯,通過虛擬貨幣實(shí)現(xiàn)財(cái)富自由的人,想想2009年如果花5000塊買比特幣,現(xiàn)在身價幾個億美金了,怎么能說投資沒有價值呢,這是屌絲逆襲的最好時機(jī)了。

            我只想說一句,真小散在5000買的時候,漲到1萬的時候基本就賣了。如果在10萬的時候還沒賣,一定是忘記自己買過比特幣了,但對于小散5000塊的投資不太會忘記。如果到了50萬還沒賣,基本上是忘記了密碼。所以不要做這種不可證偽的假設(shè)。

            當(dāng)然大家可以指出大量QQ群,朋友的朋友,賺了幾千萬幾個億的。我只能說要真是一個普通人賺了幾個億的人,是不會在Q群里發(fā)言,發(fā)朋友圈的。最有可能是默默的刪除原來屌絲好友,生怕他們來找自己借錢。所以這種消息聽聽也就罷了,自己賺了還是虧了自己心里還不清楚嗎?

            我想信那些1萬多美刀進(jìn)場的人,最近能感覺到一絲絲的寒意了。只是我們聽多了那些一夜暴富的人,卻忘記了還有更多一貧如洗的人。

            4.6 比特幣數(shù)量可控嗎?

            最后再拆一根支撐小散炒幣的沉重梁,就拿最值錢的比特幣來說,比特幣數(shù)據(jù)最終固定在2100萬個,不增也不減,最終一定會漲上去的。

            好,確實(shí)區(qū)塊鏈下修改數(shù)據(jù)是幾乎不可能,但不代表不會增加。復(fù)制還是可以的,大家知道BitCoin Cash嗎?一群礦工不滿足1M大小的區(qū)塊,要修改為8M,自己就把原來的比特幣數(shù)據(jù)拷一份,命名為比特幣現(xiàn)金(BitCoin Cash),原來的比特幣帳戶密碼在比特幣現(xiàn)金里面也能用。

            你敢相信,就這樣1個變2個了,不是說不能增加的嗎?而且價格之前也到2000多美金了,就硬生生的多出200多億的市值出來。如果想了解細(xì)節(jié),可以去百度比特幣分叉,什么分叉,就是硬拷貝好不。

            拿阿里巴巴股票市場為例吧,把誰在這個時刻持有阿里巴巴股票的數(shù)據(jù)記錄下來,然后直接拷一份叫阿里媽媽,繼續(xù)明天掛在交易所里排一起交易,體驗(yàn)到了“強(qiáng)權(quán)”的味道了嗎?

            反正看上去沒有人有損失,原來持有阿里巴巴的在阿里媽媽里多了一份,沒有任何人受到了損失,這就是完全沒有監(jiān)管的自由金融市場的樣子。

            就算不分叉,來看看全貌,一共93種在市場上交易的貨幣,現(xiàn)在找交易所上個新虛擬貨幣。新貨幣都號稱解決了比特幣的這問題和那問題,還有排第二的萊特幣號稱可以編程,是一個平臺,是所有虛擬貨幣的代幣,玩法層出不窮,連排最近一名的總市場也在500萬美金以上。

            我看了幾種主流的虛擬貨幣的技術(shù)架構(gòu),都基本還是沒有脫離比特幣的區(qū)塊鏈技術(shù)框架和思路,不過是在效率上更高一些,號稱加了更多的一些功能。

            可以在https://blockexplorer.com/market查看。

            列舉了這么多,你還相信區(qū)塊鏈下的虛擬貨幣神話嗎?一個故事可以講一段時間,但要講長久,關(guān)鍵還是要看創(chuàng)造什么樣的價值。

            所以,我非常贊成政府對比特幣的嚴(yán)格管控,真的是在保護(hù)我們普通投資者。

            最后、引用老子的一句話:“天之道,損有馀而補(bǔ)不足。人之道,則不然,損不足以奉有馀。”,投資市場就是這么一個“損不足以奉有馀”,所以小散投資者們就是雖然錢少,但還是用來損的,去補(bǔ)那些大的玩家(礦池主,交易市場主人)。

            4.7 投資者心態(tài)

            但我知道,就像當(dāng)年的3M一樣,只要政府不出手,一直讓他開著,總歸一直會有人加入的,所以我還是相當(dāng)支持國家來嚴(yán)控虛擬貨幣交易的,至少能擋住一部分人吧。

            從數(shù)據(jù)角度講,你只要承認(rèn)虛擬貨幣不創(chuàng)造價值,進(jìn)行1塊錢,被分走5毛,然后還要博取100倍、1000倍的收益。只要你認(rèn)為自己掌握的信息、自己的能力和自己的運(yùn)氣和別人一樣(實(shí)際是這個市場還存在操控),根據(jù)正態(tài)分布原理:想通過投資虛擬貨幣得到巨大收益的可能性,就和自己手機(jī)上安裝一個挖礦程序想挖出比特幣一樣的低。

            造成這種現(xiàn)象的原因很簡單,身邊總是留傳著某某個人因?yàn)槌磶咆?cái)富自由了,這種事情我一天都聽到3回了,這種快速賺錢的故事最能相互間快速傳播。但仔細(xì)想一想,這種進(jìn)一塊出五毛的市場如果大家都賺錢了,韭菜在哪里?歪國人都是韭菜?

            當(dāng)然我知道很多投資者還是會加入炒幣,因?yàn)?/p>

            1、用點(diǎn)自己的小錢、比如投入自己財(cái)產(chǎn)的10%(一毛錢都不應(yīng)該送進(jìn)去)。

            2、不懂跟風(fēng)、博取財(cái)富自由(參照我上面的概率分析)。

            3、沒什么好的理財(cái)項(xiàng)目(那就放貨基,把精力放在提升自己上)。

            如果是上面幾種人,我建議有這錢不如陪家人出去旅游一趟,但如果是下面的情況,我就不勸阻了,祝君早日財(cái)富自由。

            1、我相信在炒幣這件事情上,我的能力比別人強(qiáng)。

            2、我相信我有某種神奇的能力,炒幣總能低買高賣。

            3、我相信我的運(yùn)氣總比別人好。

            2、我認(rèn)識帶頭大哥,他有內(nèi)幕消息。

            3、我相信身邊就有大量通過炒幣致富的案例。

            有時候我也一直想不通,樂視復(fù)盤的第一天,就有不少人在跌停的時候買入樂視,因?yàn)榻^大部分人肯定認(rèn)為在5個以上跌停板,但總有一些人對自己特別自信在第一天進(jìn)入。我反正還是沒特別想通,如果你們有答案可以留言告訴我。

            05 總結(jié)

            第一次在公眾號寫這個萬字長文,也算結(jié)合自己的專業(yè)和去年學(xué)習(xí)的知識,從多個維度來分析區(qū)塊鏈技術(shù)。觀點(diǎn)未必正確,所以歡迎留言討論,但有一點(diǎn)我非常肯定,小散們遠(yuǎn)離虛擬貨幣為妙。

            另外我接下來還會補(bǔ)充二篇內(nèi)容來說明:

            1、微信的朋友圈也可算是區(qū)塊鏈的應(yīng)用。

            2、大部分現(xiàn)有的區(qū)塊鏈創(chuàng)業(yè)都是在拿錘子找釘子,很多目前用區(qū)塊鏈創(chuàng)業(yè)項(xiàng)目用中心化的技術(shù)方案實(shí)現(xiàn)起來更好,用區(qū)塊鏈實(shí)現(xiàn)就是蹭熱點(diǎn),為了拿融資方便。

            最后看到這里的朋友都不容易,非常感謝大家的支持,如果有興趣或者不同意見,歡迎留言討論。

            引用站點(diǎn)和圖片

            [1] 比特幣數(shù)據(jù)結(jié)構(gòu)圖片來源 https://www.researchgate.net/figure/a-Blockchain-structure-b-Smart-contract-structure_309543764

            [2] 比特幣區(qū)塊數(shù)據(jù)查詢 https://blockchain.info/

            [3] 比特幣交易費(fèi)用介紹 http://bitcoinfees.com/

            [4] 挖礦收益查詢 https://www.coinwarz.com/cryptocurrency/

            [5] 比特幣市場價值查看 https://blockexplorer.com/market

            [6] Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System

            [7] Andreas M.Antolopolutos, Mastering Bitcoin


          來自:

          https://new.qq.com/omn/20180203/20180203G04168.html


          posted @ 2019-10-23 09:14 狼愛上貍 閱讀(187) | 評論 (0)編輯 收藏

          再拋磚:基于區(qū)塊鏈的去中心化存儲終將失敗

          最近看了很多區(qū)塊鏈上的去中心化存儲方案,各種方法不一而足,但是仔細(xì)看了各種方法,實(shí)話說我的個人結(jié)論是“基于區(qū)塊鏈的去中心化存儲終將失敗”。

          存儲的第一要素是可靠性而不是價格

          在存儲市場,可靠性有時候也稱之為持久性,主要是指在文件存儲以后,有多大可能性文件被無損地獲取回來。

          這個道理是不辯自明的,沒有人存儲數(shù)據(jù)是可以不考慮可靠性的,但是在大多數(shù)去中心化存儲方案的白皮書中卻是沒有可靠性指標(biāo)的,大多數(shù)都是通過含糊其辭的我們在全網(wǎng)備份來保證文件不被丟失。這夠了么?請移步 https://aws.amazon.com/cn/s3/ 看看商業(yè)的存儲服務(wù)是怎么定義文件持久性的。

          從系統(tǒng)設(shè)計(jì)角度來說,可靠性設(shè)計(jì)是設(shè)計(jì)里面難度最大的工作。在一年 365 天的每一天都能夠正確地讀取數(shù)據(jù),但是再最后一分鐘數(shù)據(jù)沒有讀取到數(shù)據(jù),那么可靠性僅是 99.98%,這個數(shù)字看起來很高,但是從可靠性角度來說是不夠的。原因很簡單,從最終用戶角度來說,最后一分鐘獲取數(shù)據(jù)的失敗,實(shí)際上意味著整年工作的失敗,我存一年這個數(shù)據(jù),也許僅是為了讀這么一次,你這次給不了我數(shù)據(jù),那你這一年的存儲是第一天就丟掉數(shù)據(jù)了,還是在我獲取的那一分鐘前一秒丟掉數(shù)據(jù),對我來說沒有任何區(qū)別。
          我們自己電腦里面使用的硬盤提供的存儲,某種意義上也是一個相對低可靠性的存儲服務(wù),大多數(shù)人都能相信把數(shù)據(jù)、文件存到硬盤上,在大多數(shù)情況下數(shù)據(jù)并不會丟失,稍微懂點(diǎn)技術(shù)的明白建一個 Raid0,這個文件丟失的可能性已經(jīng)是微乎其微了;比較去中心的存儲服務(wù),也許價格上是比傳統(tǒng)云服務(wù)公司提供的存儲服務(wù)便宜很多,但是如果和個人購買一個硬盤甚至構(gòu)建一個 Raid0 對比,這個價格優(yōu)勢就不存在了。

          去中心化存儲的可靠性問題比想象的大

          如前文所說,去中心化存儲方案的白皮書中是沒有提供可靠性指標(biāo)數(shù)據(jù)的,在我看來,很悲哀的現(xiàn)實(shí)是所有的去中心化存儲方案因?yàn)樗姆植际绞菬o法給出一個可靠性指標(biāo)數(shù)據(jù),這個在傳統(tǒng)企業(yè)存儲市場業(yè)務(wù)上已經(jīng)是個很大的劣勢,但是也許有人會認(rèn)為雖然他們給不出具體的可靠性數(shù)據(jù),實(shí)際上可靠性還是很高的,因?yàn)槿ブ行幕鎯ㄟ^全網(wǎng)的備份,將同一個文件放到不同的節(jié)點(diǎn)上來提高數(shù)據(jù)的可靠性。

          這個聽起來沒錯,但是如果我們深究去中心化存儲的實(shí)現(xiàn)方式,我們會發(fā)現(xiàn)其實(shí)不然,這主要在于去中心化存儲在進(jìn)行文件存儲時的切塊存儲模式,為了保證文件的安全性,也就是文件不能被礦工訪問,主流的去中心化存儲方案都會對文件進(jìn)行切塊,然后將不同的塊存儲到不同的節(jié)點(diǎn)上去,這樣所有的存儲節(jié)點(diǎn)都不擁有這個文件的全部塊,文件屬主就不用擔(dān)心文件本身被非法獲取。

          這樣的存儲模型確實(shí)能夠解決文件安全性的問題,但是反過來卻造成了文件存儲可靠性的進(jìn)一步下降,原因很簡單,如果一個文件被拆分成了 100 個塊,這 100 個塊會被分散存儲,那么只要有任何一個塊失效,這個文件本身也就失效了,分塊操作大大降低了整體文件的可靠性,在 100 個塊的情況下,失效率實(shí)際上是提高了100倍。

          礦工或者說節(jié)點(diǎn)的行為并不能改變什么

          實(shí)際上大多數(shù)去中心化存儲方案也都關(guān)注了可靠性的問題,提出了一些方法來約束礦工的行為,比如 FileCoin 提出了 Proof-Of-Spacetime , Proof-Of-Replciation 一堆復(fù)雜地概念,寄希望于用這些指標(biāo)來經(jīng)濟(jì)驅(qū)動礦工可靠地保存文件,但是在我看來這些方法某種意義上是所謂地緣木求魚。

          首先我認(rèn)為,在大多數(shù)情況下,只要存在一定地經(jīng)濟(jì)激勵,節(jié)點(diǎn)管理人的行為并不會是造成文件丟失地主要因素,某種意義上他們事實(shí)上不會有興趣去管理這些存儲地碎塊文件。對于去中心化存儲的節(jié)點(diǎn)來說,所有的儲存在他電腦上的文件都是毫無意義的二進(jìn)制字節(jié),而維持這些字節(jié)的存在是會給他們帶來一定的收入,正常情況下他們不會有什么欲望去刪掉這些東西。因此通過進(jìn)一步強(qiáng)化經(jīng)濟(jì)激勵,來保證他們不去刪除這些對他們無意義的字節(jié)流,意義并不大。

          真正影響文件存儲可靠性的,主要來自于兩個因素:

          1. 硬盤的可靠性。按照我在網(wǎng)上搜到的硬盤可靠性分析文章,一般性機(jī)械硬盤的年失效性中位數(shù)大致是 3%,那么換言之每 30 塊硬盤在運(yùn)行一年以后會壞 1 塊,不精確的概率計(jì)算,如果有 200 塊硬盤,一年運(yùn)行下來有 6-7 塊損壞,那么假設(shè)一個 200 個節(jié)點(diǎn)的網(wǎng)絡(luò),每個文件被拆分成 100 塊,每個塊在全網(wǎng)分別形成2個復(fù)制,那么 1 年以后正常可以期望 3-4 個塊的損壞,能夠拿回完整文件的可能性微乎其微。
          2. 節(jié)點(diǎn)管理人對于節(jié)點(diǎn)的管理水平:傳統(tǒng)的 IT 技術(shù)上,針對這種硬盤可靠性實(shí)際上是有整套的解決方案,RAID 系列就是專門定義了解決這種問題的,比如簡單搭個 Raid0,就可以將出錯可能性降低到 3% 的平方,也就是說 0.09%,但是作為去中心化存儲節(jié)點(diǎn)的提供者,他們架設(shè)節(jié)點(diǎn)的目的是本來就是用簡單的閑置硬盤空間來換取一定的經(jīng)濟(jì)激勵,提供的容量空間直接影響他們的收益。所以如果有構(gòu)建 Raid0 的兩塊硬盤,肯定是將兩塊硬盤分別使用,而不會是構(gòu)建 低容量的Raid0 陣列,而且如果希望擁有大量的去中心化存儲的節(jié)點(diǎn),那么客觀上能夠組建 Raid 陣列的節(jié)點(diǎn)管理人只是少數(shù)。

          復(fù)雜的計(jì)費(fèi)模型是去中心化存儲的最后挽歌

          計(jì)費(fèi)模型的復(fù)雜性也是去中心化存儲方案的一個重大問題,這實(shí)際上是來源于存儲需求人和存儲提供者對于存儲需求理解的不一致,而作為去中心化存儲方案必須通過技術(shù)來彌合這個不一致。讓我們看下雙方是怎么看待這個存儲需求:

          存儲需求人的需求:我今天把這個文件存到你這,也許明年才要用一次,我明年用的時候你將這個文件完整地提供給我,我就付整年的錢,否則,我希望你交罰款。

          存儲提供者的需求:我同意你將這個文件存在我的本地硬盤上,每存一段時間,你就給我錢,如果你不付錢,我就希望把這個文件刪了把空間騰出來給其它愿意付費(fèi)的文件。

          這樣的計(jì)費(fèi)模型實(shí)際上是很復(fù)雜的,如果再加上文件本身的分塊操作,情況會變成存儲需求人愿意付款的前提是所有的存儲提供者都正確地返回了所要求存儲的文件塊,想象一下 100 個塊只返回了 99 個塊的情況,因?yàn)檫@ 100 個塊的存儲服務(wù)來源于完全不同的經(jīng)濟(jì)實(shí)體,達(dá)成這個共識的復(fù)雜度真不是程序能夠輕易完成的,一個簡單的規(guī)則是能完成分配,但勢必傷害到其中某一方,然后造成這一方的離開。當(dāng)雙方需求都是合理的情況下,傷害任一方都不合理。

          用戶畫像的缺失也是去中心化存儲的問題之一

          這個就不展開講了,簡單說個結(jié)論,是這些去中心化存儲方案根本沒說清楚或者說沒去想誰會用他的去中心化存儲。

          隨便拋轉(zhuǎn),還是希望拋磚引玉,大家給點(diǎn)指正,幫我理解清楚一下這繁雜的方案背后的東西。


          來自:

          https://ethfans.org/posts/decentralized-storage-will-fail

          posted @ 2019-10-23 09:12 狼愛上貍 閱讀(174) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 阳春市| 黑水县| 北票市| 黄龙县| 当涂县| 白玉县| 翼城县| 兴山县| 新源县| 皋兰县| 南郑县| 八宿县| 临高县| 沁阳市| 鹰潭市| 罗甸县| 徐州市| 历史| 义乌市| 福鼎市| 女性| 河源市| 泗洪县| 洛南县| 循化| 延长县| 黄陵县| 宝坻区| 滨州市| 通道| 阜阳市| 红河县| 张家川| 丹凤县| 盐边县| 建水县| 河池市| 宁都县| 连山| 本溪| 新源县|