Solidity 中的单向支付通道
介绍
在某些业务,市场或行业,存在不允许双向发送付款的场景,即只能从账户A向B发送付款,而不能从账户B向A发送付款。 这称为单向支付通道。
Solidity 实现
创建合约
在这一步中,我们将创建一个简单的智能合约,添加一些依赖项来安全地签署交易。这是为了防止重放攻击和重入攻击。
这些依赖项来自OpenZeppelin合约,这是一个用于安全智能合约开发的库。
pragma solidity >=0.7.0 <0.9.0;
import “github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.3/contracts/cryptography/ECDSA.sol”;
import “github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.3/contracts/utils/ReentrancyGuard.sol”;
contract UniDirectionalPaymentChannel is ReentrancyGuard {
using ECDSA for bytes32;
address payable public sender;
address payable public receiver;
constructor(address payable _receiver) payable {
require(_receiver != address(0), "receiver = zero address");
sender = msg.sender;
receiver = _receiver;
}
}
签署付款
现在,我们将创建一些函数&