āĻāĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻā§ - āĻāĻāĻāĻŋ āĻŦāĻŋāĻā§āĻ¨ā§āĻĻā§āĻ°ā§āĻā§āĻ¤ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ¨āĻŽā§āĻŦāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻ āĻŋāĻ¨āĨ¤ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦ āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻ¨ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻ¨ā§āĻ, āĻāĻāĻāĻŋ āĻ āĻ¨āĻ¸ā§āĻŦā§āĻāĻžāĻ°ā§āĻ¯ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ¸āĻāĻā§āĻ¯āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ āĻ¨ā§āĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°ā§āĨ¤
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻā§āĻŽāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒā§āĻ°ā§āĻāĻŋāĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋ āĻāĻŋāĻ˛
āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ āĻĨā§āĻā§ āĻ¤āĻĨā§āĻ¯ā§āĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¨āĻŽā§āĻŦāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°ā§āĻāĻŋāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻšāĻ¯āĻŧā§ āĻā§āĻ˛: āĻ¸āĻāĻā§āĻ¯āĻžāĻāĻŋ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻāĻŋ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ¸ā§āĻāĻŋ: āĻāĻŽāĻŋāĻ-āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ¸ā§āĻāĻŋāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°āĻāĻŋ 1 āĻĨā§āĻā§ 5 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ¯āĻž āĻ
āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°ā§āĻā§, āĻāĻ¤ā§ āĻāĻāĻāĻŋ āĻ˛āĻŦāĻŖ āĻ¯ā§āĻ āĻāĻ°ā§āĻā§ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ āĻšā§āĻ¯āĻžāĻļ āĻāĻ°ā§āĻā§
āĻā§āĻ˛ā§āĻ¯āĻŧāĻžāĻĄāĻŧ āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻŋ āĻ°ā§āĻā§āĻāĻŋāĻ˛, āĻāĻŦāĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°āĻāĻŋ āĻ˛ā§āĻāĻžāĻ¨ā§ āĻ¨āĻŽā§āĻŦāĻ° āĻāĻŦāĻ "āĻ˛āĻŦāĻŖ" āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ¤ā§ āĻĒāĻžāĻ āĻŋāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ¸āĻšāĻ āĻāĻžāĻˇāĻžāĻ¯āĻŧ, āĻ¤āĻŋāĻ¨āĻŋ āĻāĻžāĻ°ā§āĻĄāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĻāĻŋāĻ˛ā§āĻ¨āĨ¤ āĻāĻ° āĻĒāĻ°ā§, āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ¨āĻŽā§āĻŦāĻ°āĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻāĻŦāĻ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§āĻ¯āĻŧ āĻ¯ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻŋāĻ¤ā§āĻā§ āĻŦāĻž āĻšā§āĻ°ā§āĻā§ āĻāĻŋāĻ¨āĻžāĨ¤
āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻŽā§āĻŦāĻ° āĻŦāĻž "āĻ˛āĻŦāĻŖ" āĻ¨āĻž āĻĒāĻžāĻ āĻžāĻ˛ā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻŋāĻ¤ā§āĻā§āĨ¤ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻāĻŦāĻ āĻāĻ¤ā§ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻāĻ¯āĻŧ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŋāĻ˛āĨ¤ āĻāĻāĻŋ āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ, āĻ¸āĻŽāĻ¯āĻŧāĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻāĻŦāĻ āĻŦā§āĻ¯āĻ¯āĻŧāĻŦāĻšā§āĻ˛ āĻŦāĻ˛ā§ āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ¤āĻāĻ¨ āĻāĻ° āĻā§āĻ¨ā§ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤
āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ, āĻā§āĻ°ā§āĻ¯āĻžāĻĄāĻŋāĻ¸āĻŋāĻ¸ āĻĻāĻ˛ āĻāĻ¯āĻŧā§āĻāĻ¸ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻāĻ°ā§āĻā§ rsaVerify(). āĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻāĻŦāĻ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§-āĻāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ RSA āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°ā§āĻ° āĻŦā§āĻ§āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻāĻŋ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻāĻŽāĻ°āĻž āĻ¤āĻŋāĻ¨āĻāĻŋ āĻā§āĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋ:
āĻāĻ¸ā§āĻ¨ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ°āĻžāĻāĻĄ āĻ
āĻ¨ āĻāĻ¯āĻŧā§āĻāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻ˛ā§āĻŽā§āĻ˛ā§ āĻ¸āĻāĻā§āĻ¯āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻĻā§āĻāĻŋāĨ¤ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
āĻā§āĻ¯āĻžāĻŦā§ āĻ¯āĻžāĻ¨ āĻ˛āĻŋāĻĒāĻŋ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ āĻĄāĻŋāĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻĄ. āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ āĻā§āĻĄ (āĻāĻ°āĻĢā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ) āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨āĨ¤
āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻāĻ¨ā§āĻā§āĻ°āĻžāĻā§āĻ āĻā§āĻĄā§ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻĨāĻžāĻā§āĨ¤ @Callable āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ˛ā§āĻ¨āĻĻā§āĻ¨. āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻā§āĻ°āĻšā§: āĻŦāĻžāĻāĻŋ и āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ°:
- func āĻŦāĻžāĻāĻŋ (āĻā§āĻ˛ā§āĻ¯āĻŧāĻžāĻĄāĻŧ āĻāĻ¯āĻŧā§āĻ¸)
- func āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° (gameId,rsaSign)
1. āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻāĻŽā§āĻ¨ā§āĻā§āĻ° āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻāĻŦāĻ āĻŦāĻžāĻāĻŋāĻ° āĻāĻāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĨ¤
2. āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĨ¤ āĻāĻĒāĻ°ā§āĻ° āĻāĻŦāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻž āĻšāĻŦā§ āĻŦāĻžāĻāĻŋ ("50").
3. āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻāĻ¨ā§āĻā§āĻ°āĻžāĻā§āĻ āĻ ā§āĻ¯āĻžāĻĄā§āĻ°ā§āĻ¸ā§ āĻāĻāĻāĻŋ āĻāĻ¨āĻā§āĻā§āĻļāĻ¨ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ (āĻ¸āĻŽā§āĻĒā§āĻ°āĻāĻžāĻ° InvocationTx)āĨ¤ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§ āĻāĻ˛ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻžāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ° āĻŽāĻžāĻ¨ā§ āĻšāĻ˛ āĻ¯ā§ āĻāĻ¨āĻā§āĻā§āĻļāĻ¨ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ¤ā§ āĻŦāĻžāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ (āĻĒāĻāĻ¨ā§āĻĻ: āĻ¸ā§āĻā§āĻ°āĻŋāĻ) āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻ¤ā§ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°ā§āĨ¤
4. āĻŦāĻžāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨:
@Callable(i)
func bet (playerChoice) = {
let newGameNum = IncrementGameNum()
let gameId = toBase58String(i.transactionId)
let pmt = extract(i.payment)
let betNotInWaves = isDefined(pmt.assetId)
let feeNotInWaves = isDefined(pmt.assetId)
let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
let txIdUsed = isDefined(getString(this, gameId))
if (betNotInWaves)
then throw ("Bet amount must be in Waves")
else if (feeNotInWaves)
then throw ("Transaction's fee must be in Waves")
else if (txIdUsed)
then throw ("Passed txId had been used before. Game aborted.")
else {
let playerPubKey58 = toBase58String(i.callerPublicKey)
let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
ScriptResult(WriteSet(cons(DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), cons(DataEntry(GAMESCOUNTERKEY, newGameNum), cons(DataEntry(gameId, gameDataStr), nil)))), TransferSet(cons(ScriptTransfer(SERVER, COMMISSION, unit), nil)))
}
}
āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ° āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻŽ āĻ˛ā§āĻā§āĨ¤ āĻ¯āĻĨāĻž:
- āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨āĻ¨ā§āĻ¯ āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻžāĻ°ā§ (āĻā§āĻ˛āĻžāĻ° āĻ¸āĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ āĻ¨āĻŽā§āĻŦāĻ°)
- āĻā§āĻ˛āĻžāĻ° āĻ āĻŦāĻ¸ā§āĻĨāĻž = āĻāĻŽāĻž āĻĻā§āĻāĻ¯āĻŧāĻž
- āĻā§āĻ˛ā§āĻ¯āĻŧāĻžāĻĄāĻŧā§āĻ° āĻĒāĻāĻ¨ā§āĻĻ (āĻ¸ā§āĻāĻŽā§āĻ¨ā§āĻā§āĻ° āĻĻā§āĻ°ā§āĻā§āĻ¯ 50)
- āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻā§
- āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻāĻ¯āĻŧ (āĻā§āĻ˛ā§āĻ¯āĻŧāĻžāĻĄāĻŧā§āĻ° āĻŦāĻžāĻāĻŋāĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§)
āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻĄā§āĻāĻž āĻ°ā§āĻāĻ°ā§āĻĄ āĻĻā§āĻāĻ¤ā§ āĻāĻ°āĻāĻŽāĻ āĻšāĻ¯āĻŧ (āĻā§-āĻŽāĻžāĻ¨):
{
"type": "string",
"value": "03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229",
"key": "2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx"
}
"āĻā§" (āĻā§) - āĻā§āĻ˛āĻžāĻ° āĻ¸āĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ āĻ¨āĻŽā§āĻŦāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻ˛āĻž. āĻ āĻŦāĻļāĻŋāĻˇā§āĻ āĻĄā§āĻāĻž "āĻŽāĻžāĻ¨" āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻ˛āĻžāĻāĻ¨ā§ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻā§āĻ¯āĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻĒāĻžāĻ¤ā§āĻ¤ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ:
5. āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°āĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻāĻ¨ā§āĻā§āĻ°āĻžāĻā§āĻā§āĻ° āĻĻāĻŋāĻā§ "āĻĻā§āĻāĻžāĻ¯āĻŧ" āĻāĻŦāĻ āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ āĻāĻĒāĻŋāĻāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻ°āĻŋāĻ¤ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ (āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻŽ) āĻā§āĻāĻā§ āĻĒāĻžāĻ¯āĻŧāĨ¤ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻŽā§āĻ° āĻā§āĻŽ āĻāĻāĻĄāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ā§ āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§ āĻāĻāĻŋ āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻŦāĻž āĻĒā§āĻ°āĻāĻžāĻŦāĻŋāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻž
6. āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ (gameId, rsaSign)āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻ āĻŽāĻ¤:
withdraw ("FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq", "base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr/q0x6Bg==")
7. āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ (āĻ¸āĻŽā§āĻĒā§āĻ°āĻāĻžāĻ° InvocationTx)āĨ¤ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§ āĻāĻ āĻŋāĻ¤ āĻāĻāĻĨāĻĄā§āĻ° āĻĢāĻžāĻāĻļāĻ¨ā§ āĻāĻāĻāĻŋ āĻāĻ˛ āĻĨāĻžāĻā§ (gameId, rsaSign):
āĻĢāĻžāĻāĻļāĻ¨ āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§ āĻā§āĻ˛āĻžāĻ° āĻ¸āĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ āĻ¨āĻŽā§āĻŦāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻŽ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ āĻ¸āĻš āĻāĻāĻāĻŋ āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻžāĻ°ā§āĻ¤ā§ RSA āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻāĻ°āĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ā§ˇ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ
āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤.
āĻāĻ āĻ āĻ°ā§āĻĨ āĻāĻŋ?
āĻāĻŽāĻ°āĻž āĻāĻāĻ āĻŽāĻžāĻ¨ (āĻā§āĻŽ āĻāĻāĻĄāĻŋ) āĻ¨āĻŋāĻ āĻāĻŦāĻ āĻāĻ¤ā§ RSA āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻŋāĨ¤ āĻāĻŽāĻ°āĻž āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ¤ā§ āĻšāĻŦā§. āĻāĻāĻāĻžāĻŦā§ RSA āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ¨āĻŽā§āĻŦāĻ°āĻāĻŋ āĻšā§āĻ°āĻĢā§āĻ° āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻž, āĻ¯ā§āĻšā§āĻ¤ā§ āĻā§āĻŽ āĻāĻāĻĄāĻŋ āĻāĻŦāĻ RSA āĻĒā§āĻ°āĻ¯āĻŧā§āĻā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻžāĻ¨āĻž āĻ¨ā§āĻāĨ¤ āĻ¨āĻŽā§āĻŦāĻ° āĻŦāĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ āĻ āĻ°ā§āĻĨāĻšā§āĻ¨āĨ¤
8. āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻĨāĻĄā§āĻ° āĻĢāĻžāĻāĻļāĻ¨ āĻāĻžāĻ˛āĻžāĻ¯āĻŧ (gameId, rsaSign)
9. āĻāĻāĻĨāĻĄā§āĻ° āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§, āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻāĻā§ āĻ°ā§āĻ¨ā§āĻĄāĻāĻ¨ā§āĻ āĻĢāĻžāĻāĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ (gameId, rsaSign)āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ¨āĻŽā§āĻŦāĻ° āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°
# @return 1 ... 100
func GenerateRandInt (gameId,rsaSign) = {
# verify RSA signature to proof random
let rsaSigValid = rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
if (rsaSigValid)
then {
let rand = (toInt(sha256(rsaSign)) % 100)
if ((0 > rand))
then ((-1 * rand) + 1)
else (rand + 1)
}
else throw ("Invalid RSA signature")
}
āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄā§ - āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ¸āĻāĻā§āĻ¯āĻž āĻāĻā§.
āĻĒā§āĻ°āĻĨāĻŽā§, āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻāĻŋ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ, āĻ¯āĻž RSA āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°ā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻā§āĻ˛āĻžāĻ° āĻ¸āĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ āĻ¨āĻŽā§āĻŦāĻ° āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ (rsaāĻ¸āĻžāĻāĻ¨) āĻ¤āĻžāĻ°āĻĒāĻ° SHA-256 āĻĻāĻŋāĻ¯āĻŧā§ āĻšā§āĻ¯āĻžāĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ (sha256(rsaSign)).
āĻāĻŽāĻ°āĻž āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻāĻŦāĻ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻšā§āĻ¯āĻžāĻļāĻŋāĻāĻ¯āĻŧā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻĒā§āĻ°ā§āĻŦāĻžāĻāĻžāĻ¸ āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻžāĨ¤ āĻ
āĻ¤āĻāĻŦ, āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ¸āĻāĻā§āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻāĻ¨ā§āĻŽāĻā§ āĻĒā§āĻ°āĻāĻžāĻŦāĻŋāĻ¤ āĻāĻ°āĻž āĻ
āĻ¸āĻŽā§āĻāĻŦāĨ¤ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĒāĻ°āĻŋāĻ¸āĻ°ā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ¯āĻž āĻĒā§āĻ¤ā§ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, 1 āĻĨā§āĻā§ 100 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤), toInt āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻĢāĻžāĻāĻļāĻ¨ āĻāĻŦāĻ %100 (āĻāĻ° āĻ
āĻ¨ā§āĻ°ā§āĻĒ) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨
āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°ā§āĻāĻŋ rsaVerify(), āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ā§āĻ° āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ RSA āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°ā§āĻ° āĻŦā§āĻ§āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧā§ˇ āĻāĻāĻžāĻ¨ā§ GenerateRandInt(gameId,rsaSign) āĻ āĻāĻļ āĻāĻā§:
rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻā§ RSAPUBLIC āĻāĻŦāĻ rsaSign āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻāĻ¨āĻĒā§āĻā§ āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻšāĻ¯āĻŧāĨ¤ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻŦā§āĻ§āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ. āĻā§āĻ āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§ āĻ¨āĻŽā§āĻŦāĻ° āĻ¤ā§āĻ°āĻŋ āĻšāĻ¯āĻŧāĨ¤ āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§ āĻ¯ā§ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻāĻŋ āĻŦā§āĻ§ āĻ¨āĻ¯āĻŧ (āĻ āĻŦā§āĻ§ RSA āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°)āĨ¤
āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°āĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ āĻĻāĻŋāĻ¯āĻŧā§ āĻā§āĻŽ āĻāĻāĻĄāĻŋāĻ¤ā§ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ 2880 āĻŦā§āĻ˛āĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ§ Rsa āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻŋāĻā§ āĻ¨āĻž āĻāĻāĻ˛ā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻ¯āĻŧā§ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻĒā§āĻ°āĻ¸ā§āĻāĻžāĻ°āĻāĻŋ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻĒāĻ¨āĻžāĻ° āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ¯āĻŧ āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ āĻāĻāĻŋ "āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻžāĻ°āĻŖāĻž āĻāĻ°āĻž āĻ˛āĻžāĻāĻāĻ¨āĻ āĻ¨āĻ¯āĻŧ", āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻā§āĻˇāĻ¤āĻŋāĻ° āĻĻāĻŋāĻā§ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻŋāĻ¤ āĻāĻ°ā§āĨ¤ āĻ¨ā§āĻā§ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ.
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻā§āĻ˛āĻā§
āĻā§āĻŽāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸āĻāĻā§āĻ¯āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻ°āĻžāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ - āĻāĻāĻāĻŋ āĻŦāĻšāĻŋāĻ°āĻžāĻāĻ¤, āĻ¨āĻ¨-āĻŦā§āĻ˛āĻāĻā§āĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĨ¤ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻā§āĻŽ āĻāĻāĻĄāĻŋāĻ° āĻāĻāĻāĻŋ RSA āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻāĻ°ā§āĨ¤ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°ā§āĻ° āĻŦā§āĻ§āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻāĻŦāĻ āĻŦāĻŋāĻāĻ¯āĻŧā§ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§āĨ¤ āĻ¯āĻĻāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻŋāĻā§ āĻ¨āĻž āĻĒāĻžāĻ āĻžāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻ¯āĻŧā§ āĻšāĻ¯āĻŧāĨ¤
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸ā§ āĻĒā§āĻ°āĻāĻ¨ā§āĻŽā§āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ, āĻāĻžāĻ°āĻŖ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§āĻļāĻ¨ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§ āĻ
āĻ¸āĻŽā§āĻāĻŦāĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ Tradisys āĻā§āĻŽ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻāĻāĻžāĻŦā§āĻ āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ āĻā§āĻŽ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻ¸āĻŦāĻāĻŋāĻā§āĻ āĻ¸ā§āĻŦāĻā§āĻ āĻāĻŦāĻ āĻ¯āĻžāĻāĻžāĻāĻ¯ā§āĻā§āĻ¯āĨ¤ āĻ
āĻ¨ā§āĻ¯ āĻā§āĻ¨ā§ āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ā§ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻā§āĻ¨ā§ āĻ
ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻ āĻ¨ā§āĻāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¨ā§āĻ¯āĻžāĻ¯ā§āĻ¯ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ.
āĻāĻ¤ā§āĻ¸: www.habr.com