interface IMulticall { /// @notice Takes an array of abi-encoded call data, delegatecalls itself with each calldata, and returns the abi-encoded result /// @dev Reverts if any delegatecall reverts /// @param data The abi-encoded data /// @returns results The abi-encoded return values function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results);
/// @notice OPTIONAL. Takes an array of abi-encoded call data, delegatecalls itself with each calldata, and returns the abi-encoded result /// @dev Reverts if any delegatecall reverts /// @param data The abi-encoded data /// @param values The effective msg.values. These must add up to at most msg.value /// @returns results The abi-encoded return values function multicallPayable(bytes[] calldata data, uint256[] values) external payable virtual returns (bytes[] memory results); }
multicallPayable 是可选的,因为由于 msg.value,它并不总是可行的。
以下是最为简陋的实现方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
pragma solidity ^0.8.0;
/// Derived from OpenZeppelin's implementation abstract contract Multicall is IMulticall { function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { (bool success, bytes memory returndata) = address(this).delegatecall(data); require(success); results[i] = returndata; } return results; } }
服务域(BIAN 称为 Service Domain,俺称为原子能力)代表一组离散的、原子的(唯一/不重叠的)业务功能,它们构成了任何银行的功能构建块 (Functional Building Blocks),用于为解决方案的开发提供业务功能框架。服务域和业务能力为明显不同的目的而将业务区分开来。服务域是一种功能细分,旨在提供一个开发/部署框架。业务能力代表了不同的业务所拥有的能力,目的是制定和实施业务战略。
BIAN 服务域可以被认为是 “对某物做某事的能力”,专注于对一个业务对象所执行的操作。BIAN 服务域是原子性的,这意味着 “代表了可以被服务化的最小实际能力或功能分区。” 换句话讲,一个服务域将封装适合(被封装到) IT 服务中的最小实际业务功能 Business Functionality 。在某些情况下,服务域直接(或几乎)与业务能力相一致;然而,由于服务域是面向功能的,它们通常与价值流 Value Stream 有关,或者更经常地与价值流阶段 Value Stream Stage(或其一部分)有关。
def main(private field a, private field b, private field c, private field d) { field[2] h = sha256packed([a, b, c, d]); assert(h[0] == 263561599766550617289250058199814760685); assert(h[1] == 65303172752238645975888084098459749904); return; }
请注意,现在将 sha256packed 的结果与 Victor 定义的硬编码正确解决方案进行比较。 我们添加的行被视为断言:验证者不会接受不满足这些约束的证明。 显然,如果所有计算的位都相等,则此程序仅返回 1。