以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > XLM > Info

一文學習如何創建自己的ERC20代幣支付拆分器_TOKE:haiwelltoken

Author:

Time:1900/1/1 0:00:00

在加密貨幣的幾乎每個領域,支付都是一個反復出現的話題,特別是向多個質押者提供支付。例如,DAO希望為多個計劃提供資金,DEX希望合并向某些參與者分配交易費用,或者團隊希望將代幣作為月薪分發給團隊成員。智能合約使我們能夠自動化這些類型的支付功能,這就限制了人工管理支付所導致的潛在錯誤,并允許我們將寶貴的時間花在其他生產性任務上。今天,我們將學習如何創建自己的ERC20代幣支付拆分器,它可以合并到任何項目中!先決條件和設置

下面的內容要求你對Solidity有點熟悉,不過任何人都可以學習。項目架構

我們將創建兩個合約。第一個將是ERC20代幣支付拆分智能合約,第二個將是模擬池智能合約。ERC20代幣支付拆分器智能合約將是抽象的,并持有用于管理收付方及其各自支付部分的邏輯和數據。模擬池將繼承ERC20代幣支付拆分器,以便我們可以自動將支付分發給多個質押者。在兩個合約中拆分支付功能的原因有兩個:展示在真實世界的用例中代幣支付拆分合約的使用確保代幣支付拆分合約足夠靈活,任何人都可以選擇并集成到自己的項目中OpenZeppelin已有一個名為PaymentSplitter

SafeERC20

paymentToken是我們用于支付的ERC20代幣的地址。_totalShares提供來自所有收款人的份額相加。_totalTokenReleased是已支付給所有收款人的支付代幣總額。_payees提供了當前所有收款人地址的數組。_shares是收款人地址與分配給他們的份額數量的映射。_tokenReleased是收款人地址到支付代幣數量的映射。現在放置一個接受三個參數的構造函數。第一個參數是我們希望在合約部署中初始化的收款人的數組。第二個參數是每個收款人的份額數組。第三個是將用于支付的ERC20代幣的地址。pragmasolidity0

paymentToken=_paymentToken;}構造函數包含一個require語句,以確保兩個數組具有相同的長度,以便每個收款人都有分配給他們的份額。還有另一個require語句,以確保合約初始化與至少有一個收款人。還有一個for循環,它將每個收款人及其份額分配我們上面創建的變量。這是通過一個名為_addPayee的函數完成的,我們將很快創建這個函數。構造函數就緒后,再添加幾個函數來調用和獲取合約變量。pragmasolidity0

美參議員Cynthia Lummis對于SEC對Coinbase采取的法律行動表示強烈反對:金色財經報道,Bitcoin News在社交媒體上稱,美參議員Cynthia Lummis表示對美國證券交易委員會 (SEC) 最近對 Coinbase 采取的法律行動表示強烈反對。[2023/6/10 21:27:46]

functionshares(addressaccount)publicviewreturns(uint256){return_shares;}functionpayee(uint256index)publicviewreturns(address){return_payees;}現在我們將創建用于添加收款人的函數。pragmasolidity0

_addPayee是我們在構造函數中調用的用于設置收款人數組的函數。這個函數有兩個參數,收款人的帳戶和與其相關的份額數量。然后它會檢查賬戶是否為零地址,份額是否大于零,以及該賬戶是否已經注冊為收款人。如果所有檢查都通過,那么我們將數據添加到各自的變量中。現在讓我們添加一個函數來支持將代幣分發給收款人。pragmasolidity0

Release是一個任何人都可以調用的函數,它接受一個現有收款人帳戶的參數。來分析一下這個函數中發生了什么。首先,它檢查帳戶是否有分配給它的份額。然后,它創建一個名為tokenTotalReceived的變量,該變量將合約的當前代幣余額與之前釋放的代幣總數相加。創建另一個稱為payment的變量,該變量確定收到的代幣總額中有多少是欠賬戶的,然后減去多少已經釋放到賬戶。然后,一個require語句檢查當前支付金額是否大于零(即,當前是否欠下了更多代幣)。如果該檢查通過,則更新賬戶的tokenReleased,并更新totalTokenReleased。最后,支付給賬戶的代幣金額被轉賬。現在函數已經就位了!但是這個合約還有一件事要做....事件!我們將在合約中添加兩個事件,將事件添加到合約頂部是一個良好的實踐。pragmasolidity0

functionrelease(addressaccount)publicvirtual{///existingFunctionCodeemitPaymentReleased(account,payment);}現在代幣支付拆分合約已經建立!為了理解這在真實場景中是如何工作的,讓我們創建一個模擬池合約,它將導入代幣支付拆分器。創建模擬池合約

前NBA球員Baron Davis:名人將更多地關注“實用”代幣:金色財經報道,前NBA球員Baron Davis在周四表示,名人現在可能會專注于可以給用戶帶來真正效用和回報的項目。他說“展望未來,你會看到更多來自名人和運動員的創意項目。”Davis曾在NBA的七支球隊效力13年,他正在轉向區塊鏈技術,因為他創建了自己的基于NFT的平臺SLiC Images,該平臺將為體育攝影師管理數字版權和數據庫。該項目仍在開發中,將在NFT平臺Mintbase上運行。

Davis說,通過使用區塊鏈技術,該平臺正在“構建一個核心數據庫和一個發布后端,使這些攝影師能夠在社交媒體網站和雜志上授權他們的照片”。Davis說,缺乏教育和對細節的關注可能是一些名人過去未能在加密貨幣領域找到自己位置的部分原因。去年10月,真人秀明星Kim Kardashian同意向美國證券交易委員會(SEC)支付126萬美元,以解決她未能披露為推廣\"Ethereum Max的EMAX代幣而收到的報酬的指控。[2023/3/3 12:39:48]

這個合約不會很復雜,因為我們只是想演示如何集成代幣支付拆分器。這個合約定期收到我們想分發給收款人列表的特定ERC20代幣。這個ERC20代幣可以通過不同的場景到達,比如用戶存款或來自另一個智能合約的重定向費用。在現實生活中,根據不同的項目,可能會有一個更復雜的合約,包含更多的功能來滿足用戶的用例。在合約文件夾中,創建一個名為MockPool

}在這份合約中,導入三樣東西。首先是OpenZeppelin的Ownable實用程序,它在某些函數上使用唯一的onlyOwner修飾符。第二個是SafeERC20,它允許安全的ERC20代幣轉賬,正如將在合約中看到。第三個是我們的TokenPaymentSplitter合約。在MockPool構造函數中,我們需要TokenPaymentSplitter提供相同的三個參數,我們只是將它們傳遞給我們繼承的合約。在這個合約中添加了另一個函數,drainTo。它實際上與TokenPaymentSplitter合約沒有任何關系。它只是在另一個沒有設置為支付代幣的ERC20代幣被發送到池時的一種安全機制,然后有一種方法讓合約所有者釋放該代幣。測試合約

測試智能合約與創建它們同樣重要。這些合約處理的資產通常是屬于其他人的,所以作為開發人員,我們有責任確保這些資產按照他們應該的方式工作,并且我們的測試可以覆蓋幾乎所有的邊緣情況。將在這里進行的測試是一些示例,以顯示TokenPaymentSplitter智能合約按照我們的預期工作。在處理自己的項目時,可能希望創建專門適合自己的用例的測試。為了支持我們的測試,我們希望包含一個ERC20代幣,為此,我們將創建一個新的solididity文件,該文件導入OpenZepplinERC20模板以供我們的測試使用。在合約文件夾中,創建一個名為Imports.sol的新文件,并包括以下代碼:pragmasolidity^0.8.0;import"現在,在test文件夾中創建一個名為test.js的文件。在這個文件的頂部,我們將導入支持我們的測試的包。const{expect}=require('chai')const{ethers}=require('hardhat')現在,為了設置測試,我們將首先創建必要的變量,創建beforeEach函數,該函數在每次測試之前調用,并創建一個空的describe函數,該函數將很快包含我們的測試。describe('TokenPaymentSplitterTests',()=>{letdeployerletaccount1letaccount2letaccount3letaccount4lettestPaymentTokenletmockPoolbeforeEach(async()=>{=awaitethers.getSigners()constTestPaymentToken=awaitethers.getContractFactory('ERC20PresetMinterPauser')testPaymentToken=awaitTestPaymentToken.deploy('TestPaymentToken','TPT')awaittestPaymentToken.deployed(。)describe('Addpayeeswithvaryingamountsanddistributepayments',async()=>{}}在這些部分就位后,讓我們進入這些測試的核心部分!支付代幣平均分配給多個收款人

Circle CFO:預計今年底員工人數將增加25%,考慮將再次計劃上市:金色財經報道,穩定幣發行商Circle首席財務官Jeremy Fox-Geen表示,公司截至去年底擁有約900名員工,預計到2023年將增加15%至25%,即增加135至225名員工。這比2022年的增長率要低,當時的人數大約是2021年的兩倍。

Fox-Geen稱:“我們正在發展和投資,我們很幸運能夠維持我們的投資。謹慎地降低增長,并專注于最重要的事情。”此外,Fox-Geen表示,Circle打算再次計劃上市,但可能不會在今年上市。

Fox-Geen稱:“Circle正在等待更好的市場條件,遠離TerraUSD崩潰和加密交易所FTX的內爆,以便公開市場投資者可以重新評估數字資產業務的未來。我們計劃繼續走上市之路,并將在切實可行的情況下盡快采取必要措施實現這一目標。”

此前報道,Circle終止SPAC上市計劃。(WSJ)[2023/2/23 12:24:15]

在我們的第一個測試中,我們想看看當我們部署一個包含平均分配份額的收款人列表的合約時會發生什么。下面是測試代碼。it('paymenttokenisdistributedevenlytomultiplepayees',async()=>{payeeAddressArray=payeeShareArray=constMockPool=awaitethers.getContractFactory('MockPool')mockPool=awaitMockPool.deploy(payeeAddressArray,payeeShareArray,testPaymentToken.address)awaitmockPool.deployed()awaittestPaymentToken.mint(mockPool.address,100000)awaitmockPool.connect(account1).release(account1.address)awaitmockPool.connect(account2).release(account2.address)awaitmockPool.connect(account3).release(account3.address)awaitmockPool.connect(account4).release(account4.address)constaccount1TokenBalance=awaittestPaymentToken.balanceOf(account1.address)constaccount2TokenBalance=awaittestPaymentToken.balanceOf(account2.address)constaccount3TokenBalance=awaittestPaymentToken.balanceOf(account3.address)constaccount4TokenBalance=awaittestPaymentToken.balanceOf(account4.address)expect(account1TokenBalance).to.equal(25000)expect(account2TokenBalance).to.equal(25000)expect(account3TokenBalance).to.equal(25000)expect(account4TokenBalance).to.equal(25000。)在這個測試中,我們將合約分配給4個收款人,每個人都有10個相同的份額。然后我們向合約發送100000單位的testPaymentToken,并向每個收款人發放付款。在測試中可以注意到,每個收款人都在調用函數來向自己釋放代幣。支付代幣不均勻地分配給多個收款人

SBF、Caroline Ellison曾認為隨著FTX崩盤,比特幣會下跌更多:金色財經報道,據美國商品期貨交易委員會(CFTC)周三提交的一份FTX內部聊天記錄,11月6日晚上,當FTX高管監測到FTT價格的變動以及對數字資產市場產生更廣泛的傳播的效應時,一位不愿透露姓名的Alameda高管表示,我很驚訝BTC沒有下跌更多,前Alameda Research CEO Caroline Ellison回應道,我也是,SBF也同意該看法。

雖然比特幣在這些消息發布前后僅下跌了2%,但在FTX申請破產前的一周,比特幣本身的市值損失超過1000億美元,在11月10日最糟糕的時候,從21,300美元跌至16,000美元以下,跌幅高達25%。[2022/12/22 22:01:36]

在第二個測試中,我們希望確保即使每個收款人的份額分配不均,數學計算仍然有效。it('paymenttokenisdistributedunevenlytomultiplepayees',async()=>{payeeAddressArray=payeeShareArray=constMockPool=awaitethers.getContractFactory('MockPool')mockPool=awaitMockPool.deploy(payeeAddressArray,payeeShareArray,testPaymentToken.address)awaitmockPool.deployed()awaittestPaymentToken.mint(mockPool.address,100000)awaitmockPool.connect(account1).release(account1.address)awaitmockPool.connect(account2).release(account2.address)awaitmockPool.connect(account3).release(account3.address)awaitmockPool.connect(account4).release(account4.address)constmockPoolTestPaymentTokenBalance=awaittestPaymentToken.balanceOf(mockPool.address)constaccount1TokenBalance=awaittestPaymentToken.balanceOf(account1.address)constaccount2TokenBalance=awaittestPaymentToken.balanceOf(account2.address)constaccount3TokenBalance=awaittestPaymentToken.balanceOf(account3.address)constaccount4TokenBalance=awaittestPaymentToken.balanceOf(account4.address)expect(mockPoolTestPaymentTokenBalance).to.equal(1)expect(account1TokenBalance).to.equal(30303)expect(account2TokenBalance).to.equal(15151)expect(account3TokenBalance).to.equal(33333)expect(account4TokenBalance).to.equal(21212。)看起來收款人還能拿到錢,但注意到什么了嗎?合約中還剩下一個單位的支付代幣!由于Solidity沒有小數,當它達到最低單位時,它通常會四舍五入,這可能會導致合約塵埃飛揚,就像我們在這里看到的。不過不用擔心,因為我們預計未來會有支付代幣流入合約,所以它將繼續分發。支付代幣不均勻地分配給多個收款人,并將額外的支付代幣發送到池中

消息稱蘋果為先買后付服務成立專門金融子公司:6月12日消息,據IT之家消息,為了推動其先買后付業務,蘋果已成立了子公司AppleFinancing專門從事融資及信用核查的業務。據彭博社一份報告,該公司將使用其子公司AppleFinancingLLC為新服務進行信用檢查和貸款決策。該子公司擁有所有必要的州級貸款許可證,然而它與蘋果公司的主體分開運作。過去,蘋果公司依靠第三方信貸處理商和銀行提供類似服務。[2022/6/12 4:19:32]

這與之前的測試類似,不過在資金被釋放給收款人之間增加了更多支付代幣發送到池中。這表明,隨著支付代幣不斷流入模擬池合約,數學仍然可以確保收款人收到正確的金額。it('paymenttokenisdistributedunevenlytomultiplepayeeswithadditionalpaymenttokensenttopool',async()=>{payeeAddressArray=payeeShareArray=constMockPool=awaitethers.getContractFactory('MockPool')mockPool=awaitMockPool.deploy(payeeAddressArray,payeeShareArray,testPaymentToken.address)awaitmockPool.deployed()awaittestPaymentToken.mint(mockPool.address,100000)awaitmockPool.connect(account1).release(account1.address)awaitmockPool.connect(account2).release(account2.address)awaittestPaymentToken.mint(mockPool.address,100000)awaitmockPool.connect(account3).release(account3.address)awaitmockPool.connect(account4).release(account4.address)awaitmockPool.connect(account1).release(account1.address)awaitmockPool.connect(account2).release(account2.address)constmockPoolTestPaymentTokenBalance=awaittestPaymentToken.balanceOf(mockPool.address)constaccount1TokenBalance=awaittestPaymentToken.balanceOf(account1.address)constaccount2TokenBalance=awaittestPaymentToken.balanceOf(account2.address)constaccount3TokenBalance=awaittestPaymentToken.balanceOf(account3.address)constaccount4TokenBalance=awaittestPaymentToken.balanceOf(account4.address)expect(mockPoolTestPaymentTokenBalance).to.equal(1)expect(account1TokenBalance).to.equal(60606)expect(account2TokenBalance).to.equal(30303)expect(account3TokenBalance).to.equal(66666)expect(account4TokenBalance).to.equal(42424。)現在所有的測試都就緒了,是時候運行它們了,看看它們是否工作!在項目根文件夾中,使用npxhardhattest啟動測試。如果一切都是正確的,那么你應該看到如下圖所示的所有綠色格子。

如上所述,我們需要做更多的測試,以確保整個項目/協議按照預期工作,支付拆分器是它的集成部分。這將意味著更多的單元測試來覆蓋所有可用的功能,以及更復雜的集成測試,這取決于具體用例。總結

支付是許多加密協議的一個常見方面,有幾種方法可以解決它們。今天我們學習了一種管理支付的方法,盡管用戶甚至可以在此合約的基礎上構建以滿足您的特定需求,如跨多個代幣啟用支付,添加額外的收款人或移除收款人,或在一個函數調用中同時分發所有支付。Source:https://medium.com/coinmonks/create-an-erc20-token-payment-splitting-smart-contract-c79436470ccc本文來自去中心化金融社區,星球日報經授權轉載。

Tags:KENTOKETOKENTOKbvctokenLordTokenBitSG Tokenhaiwelltoken

XLM
行情端大幅下跌,是否由牛入熊?| Foresight Ventures Weekly Brief_BTC:BTCP幣

撰文:ForesightVentures概要:行情大跌,短期活躍度再次遭遇嚴重打擊。整體鎖倉量情況出現大幅度下降。NFT市場有所回暖,可關注前期強勢NFT.

1900/1/1 0:00:00
Immutable x的NFT鑄造和交易教程_ABL:Immutable

一、設置Immutablex錢包進入Immutablex官網,進入交易。 鏈接錢包。 之后按照程序走下去,你就可以順利鏈接錢包了.

1900/1/1 0:00:00
一文讀懂如何識別 DeFi 項目潛在的「拉地毯」跡象_DEF:EFI

如果你是DeFi的投資者,世界上最痛苦的感覺之一就是經歷一種被稱為“拉地毯”的事情——通常指項目的開發者放棄項目,帶著資金逃跑.

1900/1/1 0:00:00
A16z合伙人Chris Dixon:我們仍處于Web 3的仿制時代,代幣是新的數字原生_NFT:NFTM幣

譯者按:9月21日,A16z合伙人ChrisDixon發布推特表達了他對代幣的看法。在他看來,加密中的代幣與互聯網時代的網站類似,是新的數字原生,但在靈活性和通用性方面要更勝一籌.

1900/1/1 0:00:00
一文了解Uniswap Labs發布的新的自動路由(Auto Router)功能_TER:OUT

9月17日消息,UniswapLabs今日發布了新的自動路由功能,其使用先進的智能訂單路由算法,為Uniswap的交易者匹配更好的交易價格.

1900/1/1 0:00:00
?AVAX價格創新高背后的原因:大基金支持、流動性遷移和TVL上升_LANC:AVA

文:JORDANFINNESETH編譯:Zion責編:karen9月16日,Avalanche(AVAX)的價格創下68.89美元的歷史新高,在過去幾個月里.

1900/1/1 0:00:00
ads