smart-contract functionality