Now I basically understand how Wyvern protocol works. A little remaining question is about the Ether transfer in Wyvern when two orders match and the buyer pays Ether to the seller.
According to the annotation, Function executeFundsTransfer(Order memory buy, Order memory sell) is used in wyvern protocol to execute all ERC20 token / Ether transfers associated with an order match. Inside this function, transferTokens(sell.paymentToken, sell.maker, sell.feeRecipient, makerRelayerFee) is the core function that deal with token / Ether payment. However, this core function is actually calling the ERC20.transferFrom function defined in "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol"
The link is https://github.com/ProjectWyvern/wyvern-ethereum/blob/master/contracts/exchange/ExchangeCore.sol if you need.
I can't understand why an ERC20 function (for token transfer) can be used to execute Ether transfers. I know that Wyvern has its own token. At first, I thought maybe this token will be exchanged for Ether later. But I find nothing about a token-Ether exchange.
Or maybe I am wrong and the ERC20 function can also be used to transfer Ether?