function buySilver(uint256 _SilverPrice,
                       uint256 _expiration,
                       uint8 _v,
                       bytes32 _r,
                       bytes32 _s
                      ) payable external {
        
        require(_expiration >= block.timestamp);

        
        address signer = ecrecover(keccak256(_SilverPrice, _expiration), _v, _r, _s);
        require(signer == neverdieSigner);

        require(msg.value >= _SilverPrice);
        assert(ndc.transfer(msg.sender, SILVER_AMOUNT_NDC) 
            && tpt.transfer(msg.sender, SILVER_AMOUNT_TPT)
            && skl.transfer(msg.sender, SILVER_AMOUNT_SKL)
            && xper.transfer(msg.sender, SILVER_AMOUNT_XPER));

        
        emit BuySilver(msg.sender, _SilverPrice, msg.value);
    }