OpenSea 市场上的交易是可以实现智能交易的控制,这意味着是在去中心化平台上进行的交易。而是通过保证公平交易来促进卖方获得这些报酬。OpenSea 在双方之间进行交易。尽管如此平台交易仍没有在市场中以 2.5% 的价格与每个市场的竞争者达成交易。OpenSea 架构协议是由 Wyvern 的一组智能协议平台,提供了该链的跨链和以太坊的数字化交易平台支持。
调用 ProxyRegistry 合约的 registerProxy () 方法就创建了,ProxyRegistry 是使用 opensea 用户的合约账户的管理合约更多了解威:wwqqyy420
function registerProxy()
public
returns(OwnableDelegateProxy proxy)
{
require(proxies[msg.sender]==address(0));
//new 一个钱包。这个钱包合约是个可升级的代理合约,
proxy=new OwnableDelegateProxy(msg.sender,delegateProxyImplementation,abi.encodeWithSignature("initialize(address,address)",msg.sender,address(this)));
// 保存到 mapping 以所有的的地址作为索引的 key
proxies[msg.sender]=proxy;
return proxy;
}
合约账户的初始化
contract OwnableDelegateProxy is OwnedUpgradeabilityProxy{
constructor(address owner,address initialImplementation,bytes calldata)
public
{
setUpgradeabilityOwner(owner);
_upgradeTo(initialImplementation);
require(initialImplementation.delegatecall(calldata));
}
}
OwnableDelegateProxy 合约账户的代理合约(存储)它继承至 OwnedUpgradeabilityProxy->Proxy,OwnedUpgradeabilityStorage, 这个合约主要是代理合约的逻辑升级,和代理调用的逻辑,用户是可以修改这个合约的实现的更多了解威:wwqqyy420
AuthenticatedProxy 这个合约是合约账户的逻辑合约也就是 OwnableDelegateProxy 的逻辑功能。他继承了 TokenRecipient,OwnedUpgradeabilityStorage。这个合约主要有三个方法
1 初始化
// 这个方法是 new OwnableDelegateProxy 时调用的设置了所属用户和管理合约这两个值时可以修改的 1 是在 proxy 方法 delegatecall 修改,还有就是升级逻辑合约
function initialize(address addrUser,ProxyRegistry addrRegistry)
public
{
require(!initialized);
initialized=true;
user=addrUser;
registry=addrRegistry;
function setRevoke(bool revoke)
public
{
require(msg.sender==user);
revoked=revoke;
emit Revoked(revoke);
function proxy(address dest,HowToCall howToCall,bytes calldata)
public
returns(bool result)
{
require (msg.sender==user||(!revoked&®istry.contracts (msg.sender)));//setRevoke 后就只有用户自己可以调用
if(howToCall==HowToCall.Call){
result=dest.call(calldata);
}else if(howToCall==HowToCall.DelegateCall){
result=dest.delegatecall(calldata);
}
return result;
function proxyAssert(address dest,HowToCall howToCall,bytes calldata)
public
{
require(proxy(dest,howToCall,calldata));