Contract-Development
智能合約功能能否提示不同實體進行某些輸入
假設在我的系統中我有不同的節點。在定期的時間間隔中,這些節點中的一些可以被選為“黃金節點”,這意味著例如它們需要進行一些計算。是否有可能製作一個智能合約功能,它接受來自每個“黃金節點”的輸入並僅在每個“黃金節點”輸入其輸入後執行?
這個問題有點不清楚,但是……
如果您指的是乙太坊智能合約:
是的,契約可以有公共方法,它接受來自任何地方的輸入(並過濾它 - 即通過一些預定義的特徵確定您條款中的“黃金節點”)。
是的,在收集了一些輸入請求之後,契約可能會做其他事情(“執行”你寫的東西)。
但契約不能主動做某事。這意味著它應該“在”最後一個(來自最後一個“黃金節點”)請求中執行進一步的操作。您在這裡的職責是定義最後一個請求(以及什麼節點是“黃金”,正如我上面提到的)
這個問題還不夠清楚,但如果我理解你的話。當所有的 goldNodes 都回复時,您需要執行一個操作,然後等待。我正在分享一個範常式式碼,其中
allGoldNodesReplied
為假,當所有節點回复時,它被認為是真。為此,您的合約必須知道所有
goldNodes
資訊及其數量,也許還有更多資訊,以防止一個 GoldNode 回复兩次,因此您可能必須為此管理許多狀態。希望給出的例子有所幫助。contract GoldNodes { address goldNodeOwner ; // tracking all goldNodes mapping (address => bool) isGoldNode; uint goldNodeCount = 0; // prevent same node from replying twice mapping (address => bool) hasGoldNodeReplied; uint replyCount = 0; // action that has to be performed when all GoldNodes reply bool allGoldNodesReplied = false; constructor() public{ goldNodeOwner = msg.sender; } function addGoldNode(address _goldNode) public { // some admin that can invoke smart contract when some gold node is added to the system require(msg.sender == goldNodeOwner, "only gold owner allowed"); isGoldNode[_goldNode] = true; goldNodeCount++; // use SafeMath here } function reply() public { require(isGoldNode[msg.sender], "only gold nodes can reply"); require(!hasGoldNodeReplied[msg.sender], "Can not reply twice"); replyCount++; hasGoldNodeReplied[msg.sender] = true; if(replyCount == goldNodeCount){ allGoldNodesReplied = true; } } }