摘要:有效的數(shù)字簽名使收件人有理由相信該信息是由已知的發(fā)件人認證創(chuàng)建的,發(fā)件人不能否認已發(fā)送的信息不可否認,并且信息在傳輸過程中未被更改完整性。當我們說簽署交易時,我們實際上是指簽署序列化交易數(shù)據(jù)的哈希。
特殊交易:合約注冊
有一種特殊的帶有data,沒有value的交易。表示注冊一個新的合約。合約登記交易被發(fā)送到一個特殊的目的地地址,即零地址。簡而言之,合約注冊交易中的+to+字段包含地址 0x0。該地址既不代表EOA(沒有相應的私人/公共密鑰對)也不代表合約。它永遠不會花費ether或啟動交易。它僅用作目的地,具有“注冊此合約”的特殊含義。
盡管零地址僅用于合約注冊,但它有時會收到來自各個地址的付款。對此有兩種解釋:無論是偶然的,導致ether的喪失,還是故意的_ ether燃燒_(見[burning_ether])。如果你想進行有意識的ether燃燒,你應該向網(wǎng)絡明確你的意圖,并使用專門指定的燃燒地址:
0x000000000000000000000000000000000000dEaD
Warning
發(fā)送至合約注冊地址 0x0 或指定燃燒地址 0x0 ... dEaD 的任何ether將變得不可消費并永遠丟失。
合約注冊交易不應包含ether value,只能包含合約編譯字節(jié)碼的data。此次交易的唯一影響是注冊合約。
作為例子,我們可以發(fā)布 [intro] 中使用的 Faucet.sol。合約需要編譯成二進制十六進制表示。這可以用Solidiy編譯器完成。
solc --bin Faucet.sol
======= Faucet.sol:Faucet =======
Binary:
6060604052341561000f57600080fd5b60e58061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d146041575b005b3415604b57600080fd5b605f60048080359060200190919050506061565b005b67016345785d8a00008111151515607757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151560b657600080fd5b505600a165627a7a72305820d276ffffd56041f7dc2d2eab69f01dd0a0146446562e25236cf4ba5095d2ee802f0029
相同的信息也可以從Remix在線編譯器獲得。 現(xiàn)在我們可以創(chuàng)建交易。src = web3.eth.accounts[0];> faucet_code = "0x6060604052341561000f57600080fd5b60e58061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d146041575b005b3415604b57600080fd5b605f60048080359060200190919050506061565b005b67016345785d8a00008111151515607757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151560b657600080fd5b505600a165627a7a72305820d276ffffd56041f7dc2d2eab69f01dd0a0146446562e25236cf4ba5095d2ee802f0029"> web3.eth.sendTransaction({from: src, data: faucet_code, gas: 113558, gasPrice: 200000000000})"0x7bcc327ae5d369f75b98c0d59037eec41d44dfae75447fd753d9f2db9439124b"
不需要指定+to+參數(shù),將使用默認的零地址。你可以指定 gasPrice 和 gas 限制。 一旦合約被開采,我們可以在etherscan區(qū)塊瀏覽器上看到它。
Etherscan showing the contract successully mined
Figure 5. Etherscan showing the contract successully minded
你可以查看交易的接收者以獲取有關合約的信息。
eth.getTransactionReceipt("0x7bcc327ae5d369f75b98c0d59037eec41d44dfae75447fd753d9f2db9439124b");
{
blockHash: "0x6fa7d8bf982490de6246875deb2c21e5f3665b4422089c060138fc3907a95bb2",
blockNumber: 3105256,
contractAddress: "0xb226270965b43373e98ffc6e2c7693c17e2cf40b",
cumulativeGasUsed: 113558,
from: "0x2a966a87db5913c1b22a59b0d8a11cc51c167a89",
gasUsed: 113558,
logs: [],
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
status: "0x1",
to: null,
transactionHash: "0x7bcc327ae5d369f75b98c0d59037eec41d44dfae75447fd753d9f2db9439124b",
transactionIndex: 0}
在這里我們可以看到合約的地址。我們可以按照 將數(shù)據(jù)傳輸?shù)紼OA或合約 所示,從合約發(fā)送和接收資金。
contract_address = "0xb226270965b43373e98ffc6e2c7693c17e2cf40b"> web3.eth.sendTransaction({from: src, to: contract_address, value: web3.toWei(0.1, "ether"), data: ""});"0x6ebf2e1fe95cc9c1fe2e1a0dc45678ccd127d374fdf145c5c8e6cd4ea2e6ca9f"> web3.eth.sendTransaction({from: src, to: contract_address, value: 0, data: "0x2e1a7d4d000000000000000000000000000000000000000000000000002386f26fc10000"});"0x59836029e7ce43e92daf84313816ca31420a76a9a571b69e31ec4bf4b37cd16e"
過一段時間,這兩個交易都可以在ethescan上看到
Etherscan showing the transactions for sending and receiving funds
Figure 6. Etherscan showing the transactions for sending and receiving funds
數(shù)字簽名
到目前為止,我們還沒有深入探討“數(shù)字簽名”的細節(jié)。在本節(jié)中,我們將探討數(shù)字簽名是如何工作的,以及如何在不泄露私鑰的情況下提供私鑰所有權(quán)的證明。
橢圓曲線數(shù)字簽名算法(ECDSA)
以太坊中使用的數(shù)字簽名算法是_Elliptic Curve Digital Signature Algorithm_,或_ECDSA_。ECDSA是用于基于橢圓曲線私鑰/公鑰對的數(shù)字簽名的算法,如 [elliptic_curve] 中所述。
數(shù)字簽名在以太坊中有三種用途(請參閱下面的邊欄)。首先,簽名證明私鑰的所有者,暗示著以太坊賬戶的所有者,已經(jīng)授權(quán)支付ether或執(zhí)行合約。其次,授權(quán)的證明是_undeniable_(不可否認)。第三,簽名證明交易數(shù)據(jù)在交易簽名后沒有也不能被任何人修改。
Wikipedia對“數(shù)字簽名”的定義
數(shù)字簽名是用于證明數(shù)字信息或文件真實性的數(shù)學方案。有效的數(shù)字簽名使收件人有理由相信該信息是由已知的發(fā)件人(認證)創(chuàng)建的,發(fā)件人不能否認已發(fā)送的信息(不可否認),并且信息在傳輸過程中未被更改(完整性) 。 來源: https://en.wikipedia.org/wiki...
數(shù)字簽名如何工作
數(shù)字簽名是一種數(shù)學簽名,由兩部分組成。第一部分是使用私鑰(簽名密鑰)從消息(交易)中創(chuàng)建簽名的算法。第二部分是允許任何人僅使用消息和公鑰來驗證簽名的算法。
創(chuàng)建數(shù)字簽名
在以太坊實現(xiàn)的ECDSA中,被簽名的“消息”是交易,或者更確切地說,來自交易的RLP編碼數(shù)據(jù)的Keccak256哈希。簽名密鑰是EOA的私鑰。結(jié)果是簽名:
((Sig = F_{sig}(F_{keccak256}(m), k)))
其中:
_k_是簽名私鑰
_m_是RLP編碼的交易
Fkeccak256 是Keccak256哈希函數(shù)
Fsig 是簽名算法
Sig 是由此產(chǎn)生的簽名
更多關于ECDSA數(shù)學的細節(jié)可以在 ECDSA數(shù)學 中找到。
函數(shù) Fsig 產(chǎn)生一個由兩個值組成的簽名+Sig+,通常稱為+R+和+S+:
Sig = (R, S)
驗證簽名
要驗證簽名,必須有簽名(R+和+S),序列化交易和公鑰(與用于創(chuàng)建簽名的私鑰對應)。實質(zhì)上,對簽名的驗證意味著“只有生成此公鑰的私鑰的所有者才能在此交易上產(chǎn)生此簽名。”
簽名驗證算法采用消息(交易的散列或其部分),簽名者的公鑰和簽名(+R+和+S+值),如果簽名對此消息和公鑰有效,則返回TRUE。
ECDSA數(shù)學
如前所述,簽名由數(shù)學函數(shù) Fsig 創(chuàng)建,該函數(shù)生成由兩個值_R_和_S_組成的簽名。在本節(jié)中,我們將更詳細地討論函數(shù) Fsig 。
簽名算法首先生成_ephemeral_(臨時的)私鑰/公鑰對。在涉及簽名私鑰和交易哈希的轉(zhuǎn)換之后,此臨時密鑰對用于計算_R_和_S_值。
臨時密鑰對由兩個輸入值生成:
1.一個隨機數(shù)_q_,用作臨時私鑰 1.和橢圓曲線生成點_G_
從_q_和_G_開始,我們生成相應的臨時公鑰_Q_(以_Q = q * G_計算,與以太坊公鑰的派生方式相同,參見[pubkey])。數(shù)字簽名的_R_值就是臨時公鑰_Q_的x坐標。
然后,算法計算簽名的_S_值,以便:
S ≡ q-1 (Keccak256(m) + k * R) (mod p)
其中:
_q_是臨時私鑰
_R_是臨時公鑰的x坐標
_k_是簽名(EOA所有者)的私鑰
_m_是交易數(shù)據(jù)
_p_是橢圓曲線的素數(shù)階
驗證是簽名生成函數(shù)的反函數(shù),使用_R_,S_值和公鑰來計算一個值_Q,它是橢圓曲線上的一個點(簽名創(chuàng)建中使用的臨時公鑰):
Q ≡ S-1 Keccak256(m) G + S-1 R K (mod p)
其中:
_R_和_S_是簽名值
_K_是簽名者(EOA所有者)的公鑰
_m_是被簽名的交易數(shù)據(jù)
_G_是橢圓曲線生成點
_p_是橢圓曲線的素數(shù)階
如果計算的點_Q_的x坐標等于_R_,則驗證者可以斷定該簽名是有效的。
請注意,在驗證簽名時,私鑰既不被知道也不會透露。
Tip
ECDSA必然是一門相當復雜的數(shù)學; 完整的解釋超出了本書的范圍。許多優(yōu)秀的在線指南會一步一步地通過它:搜索“ECDSA explained”或嘗試這一個:http://bit.ly/2r0HhGB[]。
實踐中的交易簽名
為了產(chǎn)生有效的交易,發(fā)起者必須使用橢圓曲線數(shù)字簽名算法將數(shù)字簽名應用于消息。當我們說“簽署交易”時,我們實際上是指“簽署RLP序列化交易數(shù)據(jù)的Keccak256哈希”。簽名應用于交易數(shù)據(jù)的哈希,而不是交易本身。
Tip
在#2,675,000塊,Ethereum實施了“Spurious Dragon”硬分叉,除其他更改外,還推出了包括交易重播保護的新簽名方案。這個新的簽名方案在EIP-155中指定(參見[eip155])。此更改會影響簽名過程的第一步,在簽名之前向交易添加三個字段(v,r,s)。
要在以太坊簽署交易,發(fā)件人必須:
創(chuàng)建一個包含九個字段的交易數(shù)據(jù)結(jié)構(gòu):nonce,gasPrice,startGas,to,value,data,v,r,s
生成交易的RLP編碼的序列化消息
計算此序列化消息的Keccak256哈希
計算ECDSA簽名,用發(fā)起EOA的私鑰簽名散列
在交易中插入ECDSA簽名計算出的 r 和 s 值
原始交易創(chuàng)建和簽名
讓我們創(chuàng)建一個原始交易并使用 ethereumjs-tx 庫對其進行簽名。此示例的源代碼位于GitHub存儲庫中的 raw_tx_demo.js 中:
raw_tx_demo.js: Creating and signing a raw transaction in JavaScript
link:code/web3js/raw_tx/raw_tx_demo.js[]
在此處下載: https://github.com/ethereumbo...
運行示例代碼:
$ node raw_tx_demo.js
RLP-Encoded Tx: 0xe6808609184e72a0008303000094b0920c523d582040f2bcb1bd7fb1c7c1ecebdb348080
Tx Hash: 0xaa7f03f9f4e52fcf69f836a6d2bbc7706580adce0a068ff6525ba337218e6992
Signed Raw Transaction: 0xf866808609184e72a0008303000094b0920c523d582040f2bcb1bd7fb1c7c1ecebdb3480801ca0ae236e42bd8de1be3e62fea2fafac7ec6a0ac3d699c6156ac4f28356a4c034fda0422e3e6466347ef6e9796df8a3b6b05bed913476dc84bbfca90043e3f65d5224
用EIP-155創(chuàng)建原始交易
EIP-155“簡單重播攻擊保護”標準在簽名之前指定了重播攻擊保護(replay-attack-protected)的交易編碼,其中包括交易數(shù)據(jù)中的_chain identifier_。這確保了為一個區(qū)塊鏈(例如以太坊主網(wǎng))創(chuàng)建的交易在另一個區(qū)塊鏈(例如Ethereum Classic或Ropsten測試網(wǎng)絡)上無效。因此,在一個網(wǎng)絡上廣播的交易不能在另一個網(wǎng)絡上廣播,因此得名“重放攻擊保護”。
EIP-155向交易數(shù)據(jù)結(jié)構(gòu)添加了三個字段 v,r+和+s。r+和+s 字段被初始化為零。這三個字段在編碼和散列_之前_被添加到交易數(shù)據(jù)中。因此,三個附加字段會更改交易的散列,稍后將應用簽名。通過在被簽名的數(shù)據(jù)中包含鏈標識符,交易簽名可以防止任何更改,因為如果鏈標識符被修改,簽名將失效。因此,EIP-155使交易無法在另一個鏈上重播,因為簽名的有效性取決于鏈標識符。
簽名前綴字段+v+被初始化為鏈標識符,其值為:
Chain
Chain ID
Ethereum main net
1
Morden (obsolete), Expanse
2
Ropsten
3
Rinkeby
4
Rootstock main net
30
Rootstock test net
31
Kovan
42
Ethereum Classic main net
61
Ethereum Classic test net
62
Geth private testnets
1337
由此產(chǎn)生的交易結(jié)構(gòu)被進行RLP編碼,哈希和簽名。簽名算法也稍作修改,以在+v+前綴中對鏈ID進行編碼。
有關更多詳細信息,請參閱EIP-155規(guī)范: https://github.com/ethereum/E...
簽名前綴值(v)和公鑰恢復
如交易的結(jié)構(gòu)所述,交易消息不包含任何“from”字段。這是因為發(fā)起者的公鑰可以直接從ECDSA簽名中計算出來。一旦你有公鑰,你可以很容易地計算出地址。恢復簽名者公鑰的過程稱為_公鑰恢復_。
給定 ECDSA數(shù)學 中計算的值 r 和 s,我們可以計算兩個可能的公鑰。
首先,我們根據(jù)簽名中的x坐標 r 值計算兩個橢圓曲線點R和R"。有個兩點,因為橢圓曲線在x軸上是對稱的,所以對于任何值+x+,在x軸的兩側(cè)有兩個可能的值適合曲線。
從 r 開始,我們也計算r-1這是 r 的倒數(shù)。
最后我們計算 z,它是消息散列的最低位,其中n是橢圓曲線的階數(shù)。
然后兩個可能的公鑰是:
K1 = r-1 (sR - zG)
和
K2 = r-1 (sR" - zG)
其中:
K1 和 K2 是簽名者公鑰的兩種可能性
r-1是簽名的+r+值的倒數(shù)
s是簽名的+s+值
R和R"是臨時公鑰_Q_的兩種可能性
z是消息散列的最低位
G是橢圓曲線生成點
為了使事情更有效率,交易簽名包括一個前綴值 v,它告訴我們兩個可能的R值中哪一個是臨時的公鑰。如果 v 是偶數(shù),那么R是正確的值。如果 v 是奇數(shù),那么選擇R"。這樣,我們只需要計算R的一個值。
分離簽名和傳輸(離線簽名)
一旦交易被簽署,它就可以傳送到以太坊網(wǎng)絡。創(chuàng)建,簽署和廣播交易的三個步驟通常發(fā)生在單個函數(shù)中,例如使用+web3.eth.sendTransaction+。但是,正如我們在原始交易創(chuàng)建和簽名中看到的那樣,你可以通過兩個多帶帶的步驟創(chuàng)建和簽署交易。一旦你簽署了交易記錄,你就可以使用+web3.eth.sendSignedTransaction+傳輸該交易記錄,該方法采用十六進制編碼的簽名交易信息并在Ethereum網(wǎng)絡上傳輸。
你為什么要分開交易的簽署和傳輸?最常見的原因是安全:簽名交易的計算機必須將解鎖的私鑰加載到內(nèi)存中。傳輸?shù)挠嬎銠C必須連接到互聯(lián)網(wǎng)并運行以太坊客戶端。如果這兩個功能都在一臺計算機上,那么你的在線系統(tǒng)上有私鑰,這非常危險。分離簽名和傳輸功能稱為 離線簽名 offline signing,是一種常見的安全措施。
根據(jù)你所需的安全級別,你的“離線簽名”計算機可能與在線計算機存在不同程度的分離,從隔離和防火墻子網(wǎng)(在線但隔離)到完全脫機系統(tǒng),成為 氣隙 _air-gapped_系統(tǒng) 。在氣隙系統(tǒng)中根本沒有網(wǎng)絡連接 - 計算機與在線環(huán)境是“空氣”隔離的。使用數(shù)據(jù)存儲介質(zhì)或(更好)網(wǎng)絡攝像頭和QR碼將交易記錄到氣隙計算機上,以簽署交易。當然,這意味著你必須手動傳輸你想要簽名的每個交易,不能批量化。
盡管沒有多少環(huán)境可以利用完全氣隙系統(tǒng),但即使是小程度的隔離也具有顯著的安全優(yōu)勢。例如,帶防火墻的隔離子網(wǎng)只允許通過消息隊列協(xié)議,可以提供大大降低的攻擊面,并且比在線系統(tǒng)上簽名的安全性高得多。許多公司使用諸如ZeroMQ(0MQ)的協(xié)議,因為它為簽名計算機提供了減少的攻擊面。有了這樣的設置,交易就被序列化并排隊等待簽名。排隊協(xié)議以類似于TCP套接字的方式將序列化的消息發(fā)送到簽名計算機。簽名計算機從隊列中讀取序列化的交易(仔細地),使用適當?shù)拿荑€應用簽名,并將它們放置在傳出隊列中。傳出隊列將簽名的交易傳輸?shù)绞褂肊thereum客戶端的計算機上,客戶端將這些交易出隊并傳輸。
交易傳播
以太坊網(wǎng)絡使用“泛洪”路由協(xié)議。每個以太坊客戶端,在_Peer-to-Peer(P2P)中作為_node,(理想情況下)構(gòu)成_mesh_網(wǎng)絡。沒有網(wǎng)絡節(jié)點是“特殊的”,它們都作為平等的對等體。我們將使用術語“節(jié)點”來指代連接并參與P2P網(wǎng)絡的以太坊客戶端。
交易傳播開始于創(chuàng)建(或從離線接收)簽名交易的以太坊節(jié)點。交易被驗證,然后傳送到_直接_連接到始發(fā)節(jié)點的所有其他以太坊節(jié)點。平均而言,每個以太坊節(jié)點保持與至少13個其他節(jié)點的連接,稱為_鄰居_。每個鄰居節(jié)點在收到交易后立即驗證交易。如果他們同意這是有效的,他們會保存一份副本并將其傳播給所有的鄰居(除了它的鄰居)。結(jié)果,交易從始發(fā)節(jié)點向外漣漪式地遍歷網(wǎng)絡,直到網(wǎng)絡中的所有節(jié)點都擁有交易的副本。
幾秒鐘內(nèi),以太坊交易就會傳播到全球所有以太坊節(jié)點。從每個節(jié)點的角度來看,不可能辨別交易的起源。發(fā)送給我們節(jié)點的鄰居可能是交易的發(fā)起者,或者可能從其鄰居那里收到它。為了能夠跟蹤交易的起源或干擾傳播,攻擊者必須控制所有節(jié)點的相當大的百分比。這是P2P網(wǎng)絡安全和隱私設計的一部分,尤其適用于區(qū)塊鏈。
記錄到區(qū)塊鏈中
雖然以太坊中的所有節(jié)點都是相同的對等節(jié)點,但其中一些節(jié)點由_礦工_操作,并將交易和數(shù)據(jù)塊提供給_挖礦農(nóng)場_,這些節(jié)點是具有高性能圖形處理單元(GPU)的計算機。挖掘計算機將交易添加到候選塊,并嘗試查找使得候選塊有效的_Proof-of-Work_。我們將在[consensus]中更詳細地討論這一點。
不深入太多細節(jié),有效的交易最終將被包含在一個交易塊中,并記錄在以太坊區(qū)塊鏈中。一旦開采成塊,交易還通過修改賬戶余額(在簡單付款的情況下)或通過調(diào)用改變其內(nèi)部狀態(tài)的合約來修改以太坊單例的狀態(tài)。這些更改將與交易一起以交易_收據(jù)_ receipt 的形式記錄,該交易也可能包含_事件_ events。我們將在 [evm] 中更詳細地檢查所有這些。
我們的交易已經(jīng)完成了從創(chuàng)建到被EOA簽署,傳播以及最終采礦的旅程。它改變了單例的狀態(tài),并在區(qū)塊鏈上留下了不可磨滅的印記。
多重簽名(multisig)交易
如果你熟悉比特幣的腳本功能,那么你就知道有可能創(chuàng)建一個比特幣多重簽名賬戶,該賬戶只能在多方簽署交易時花費資金(例如2個或3個或4個簽名)。以太坊的價值交易沒有多重簽名的規(guī)定,盡管可以部署任意條件的任意合約來處理ether和代幣的轉(zhuǎn)讓。
為了在多重簽名情況下保護你的ether,將它們轉(zhuǎn)移到多重簽名合約中。無論何時你想將資金轉(zhuǎn)入其他賬戶,所有必需的用戶都需要使用常規(guī)錢包軟件將交易發(fā)送至合約,從而有效授權(quán)合約執(zhí)行最終交易。
這些合約也可以設計為在執(zhí)行本地代碼或觸發(fā)其他合約之前需要多個簽名。該方案的安全性最終由多重簽名合約代碼確定
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/103041.html
摘要:商城小程序的輪播實現(xiàn)小程序的輪播圖實現(xiàn)真是太方便了就是這么簡單粗暴。遍歷數(shù)組,把即選的加起來。商品的分類商品分類中主要是根據(jù)商品判斷選擇類別,在這里參考了林鑫大神的分類。 說在前面 從接觸微信小程序到第一次動手實現(xiàn)一個商城小程序,我發(fā)現(xiàn)我們怕的不是不會寫,而是不敢動手去寫,每個人都是從無到有,所以勇敢踏出我們的第一步吧,看官方文檔去吧騷年!showImg(https://segment...
摘要:我想說,學別人注冊優(yōu)步司機做優(yōu)步是一個確實是很奇葩的一個嘗試。從一開始就表明了我是程序員出身說實在的,做優(yōu)步司機,從注冊司機到上路都鬧得不是很好。我想說,剩下的沒一步是好走的。真心說聲程序員兼職做了優(yōu)步就是為了創(chuàng)業(yè) 我是老碼農(nóng)了,從05年碼PHP到現(xiàn)在十年了。 最近一直都在找一個方向,一個事業(yè)的方向。在我同輩的人有人去創(chuàng)業(yè)了,有人創(chuàng)業(yè)失敗了,有人又創(chuàng)業(yè)失敗了。總之,到了我這個年齡,確實...
摘要:前言前后端分離的風從我第一天當開發(fā)的時候就已經(jīng)在我耳邊吹得呼呼作響了聽著各種前后端分離的各種牛心里還是有點癢癢后來因為各種原因轉(zhuǎn)向前端慢慢地了解起來了前后端分離雖然說轉(zhuǎn)向了前端但是小公司人不多后端接口還是要我寫一點好了上面都是些廢話下面開始 前言 前后端分離的風從我第一天當開發(fā)的時候 就已經(jīng)在我耳邊吹得呼呼作響了 聽著各種前后端分離的各種牛X,心里還是有點癢癢 后來因為各種原因轉(zhuǎn)向前...
閱讀 1415·2023-04-26 01:58
閱讀 2294·2021-11-04 16:04
閱讀 1783·2021-08-31 09:42
閱讀 1774·2021-07-25 21:37
閱讀 1074·2019-08-30 15:54
閱讀 2079·2019-08-30 15:53
閱讀 3057·2019-08-29 13:28
閱讀 2696·2019-08-29 10:56