新零售指的就是线上、线下和物流必须结合在一起。也就是说,线下的企业必须走到线上去,线上的企业必须走到线下来,线上、线下同现代物流结合在一起,才能真正创造出新的销售方式。
那么“新零售”究竟是什么?新零售指的是一种将线下线上零售深度结合,服务商利用大数据、云计算等创新的技术,Collect consumer needs,reverse engineer the entire production,truly achieve a user experience created by consumers,and achieve a zero distance business model between users and enterprises.
//SPDX-License-Identifier:GPL-3.0
pragma solidity>=0.6.2;
//helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper{
function safeApprove(address token,address to,uint value)internal{
//bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success,bytes memory data)=token.call(abi.encodeWithSelector(0x095ea7b3,to,value));
require(success&&(data.length==0||abi.decode(data,(bool))),'TransferHelper:APPROVE_FAILED');
}
function safeTransfer(address token,address to,uint value)internal{
//bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success,bytes memory data)=token.call(abi.encodeWithSelector(0xa9059cbb,to,value));
require(success&&(data.length==0||abi.decode(data,(bool))),'TransferHelper:TRANSFER_FAILED');
}
function safeTransferFrom(address token,address from,address to,uint value)internal{
//bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success,bytes memory data)=token.call(abi.encodeWithSelector(0x23b872dd,from,to,value));
require(success&&(data.length==0||abi.decode(data,(bool))),'TransferHelper:TRANSFER_FROM_FAILED');
}
function safeTransferETH(address to,uint value)internal{
(bool success,)=to.call{value:value}(new bytes(0));
require(success,'TransferHelper:ETH_TRANSFER_FAILED');
}
}
interface IUniswapV2Pair{
event Approval(address indexed owner,address indexed spender,uint value);
event Transfer(address indexed from,address indexed to,uint value);
function name()external pure returns(string memory);
function symbol()external pure returns(string memory);
function decimals()external pure returns(uint8);
function totalSupply()external view returns(uint);
function balanceOf(address owner)external view returns(uint);
function allowance(address owner,address spender)external view returns(uint);
function approve(address spender,uint value)external returns(bool);
function transfer(address to,uint value)external returns(bool);
function transferFrom(address from,address to,uint value)external returns(bool);
function DOMAIN_SEPARATOR()external view returns(bytes32);
function PERMIT_TYPEHASH()external pure returns(bytes32);
function nonces(address owner)external view returns(uint);
function permit(address owner,address spender,uint value,uint deadline,uint8 v,bytes32 r,bytes32 s)external;
event Mint(address indexed sender,uint amount0,uint amount1);
event Burn(address indexed sender,uint amount0,uint amount1,address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);