diff --git a/Lesson-1/assignment/yours.sol b/Lesson-1/assignment/yours.sol
index dfdb2c48..c8635e4a 100644
--- a/Lesson-1/assignment/yours.sol
+++ b/Lesson-1/assignment/yours.sol
@@ -1 +1,50 @@
/*作业请提交在这个目录下*/
+pragma solidity ^0.4.14;
+
+contract Payroll {
+ uint constant payDuration = 10 seconds;
+
+ address owner;
+ uint salary;
+ address employee;
+ uint lastPayday;
+
+ function Payroll() {
+ owner = msg.sender;
+ }
+
+ function updateEmployee(address e, uint s) {
+ require(msg.sender == owner);
+
+ if (employee != 0x0) {
+ uint payment = salary * (now - lastPayday) / payDuration;
+ employee.transfer(payment);
+ }
+
+ employee = e;
+ salary = s * 1 ether;
+ lastPayday = now;
+ }
+
+ function addFund() payable returns (uint) {
+ return this.balance;
+ }
+
+ function calculateRunway() returns (uint) {
+ return this.balance / salary;
+ }
+
+ function hasEnoughFund() returns (bool) {
+ return calculateRunway() > 0;
+ }
+
+ function getPaid() {
+ require(msg.sender == employee);
+
+ uint nextPayday = lastPayday + payDuration;
+ assert(nextPayday < now);
+
+ lastPayday = nextPayday;
+ employee.transfer(salary);
+ }
+}
diff --git a/Lesson-2/README.md b/Lesson-2/README.md
new file mode 100644
index 00000000..1fdc5b30
--- /dev/null
+++ b/Lesson-2/README.md
@@ -0,0 +1,16 @@
+## 硅谷live以太坊智能合约频道官方地址
+
+### 第二课《智能合约设计进阶-多员工薪酬系统》
+
+目录结构
+
|
+
|--orgin 课程初始代码
+
|
+
|--assignment 课程作业提交代码
+
+### 本节知识点
+第2课:智能合约设计进阶-多员工薪酬系统
+- 动态静态数组的不同
+- 函数输入参数检查 revert
+- 循环与遍历的安全性
+- 程序运行错误检查和容错:assert与require
diff --git a/Lesson-2/assignment/README.md b/Lesson-2/assignment/README.md
new file mode 100644
index 00000000..a1fa2d04
--- /dev/null
+++ b/Lesson-2/assignment/README.md
@@ -0,0 +1,10 @@
+## 硅谷live以太坊智能合约 第二课作业
+这里是同学提交作业的目录
+
+### 第二课:课后作业
+完成今天的智能合约添加100ETH到合约中
+- 加入十个员工,每个员工的薪水都是1ETH
+每次加入一个员工后调用calculateRunway这个函数,并且记录消耗的gas是多少?Gas变化么?如果有 为什么?
+- 如何优化calculateRunway这个函数来减少gas的消耗?
+提交:智能合约代码,gas变化的记录,calculateRunway函数的优化
+
diff --git a/Lesson-2/assignment/yours.sol b/Lesson-2/assignment/yours.sol
new file mode 100644
index 00000000..b620836b
--- /dev/null
+++ b/Lesson-2/assignment/yours.sol
@@ -0,0 +1,87 @@
+/*作业请提交在这个目录下*/
+pragma solidity ^0.4.14;
+
+contract Payroll {
+ struct Employee {
+ address id;
+ uint salary;
+ uint lastPayday;
+ }
+
+ uint constant payDuration = 10 seconds;
+
+ address owner;
+ Employee[] employees;
+
+ function Payroll() {
+ owner = msg.sender;
+ }
+
+ function _partialPaid(Employee employee) private {
+ uint payment = employee.salary * (now - employee.lastPayday) / payDuration;
+ employee.id.transfer(payment);
+ }
+
+ function _findEmployee(address employeeId) private returns (Employee, uint) {
+ for(uint i = 0; i < employees.length; i++){
+ if (employees[i].id == employeeId){
+ return (employees[i], i);
+ }
+ }
+ }
+
+ function addEmployee(address employeeId, uint salary) {
+ require(msg.sender == owner);
+ var (emloyee, index) = _findEmployee(employeeId);
+ assert(emloyee.id == 0x0);
+ employees.push(Employee(employeeId, salary * 1 ether, now));
+ }
+
+ function removeEmployee(address employeeId) {
+ require(msg.sender == owner);
+ var (employee, index) = _findEmployee(employeeId);
+ assert(employee.id != 0x0);
+
+ _partialPaid(employee);
+ delete employees[index];
+ employees[index] = employees[employees.length - 1];
+ employees.length -= 1;
+ }
+
+ function updateEmployee(address employeeId, uint salary) {
+ require(msg.sender == owner);
+ var (employee, index) = _findEmployee(employeeId);
+ assert(employee.id != 0x0);
+
+ _partialPaid(employee);
+ employee.salary = salary;
+ employee.lastPayday = now;
+ }
+
+ function addFund() payable returns (uint) {
+ return this.balance;
+ }
+
+ function calculateRunway() returns (uint) {
+ uint totalSalary = 0;
+ for (uint i = 0; i < employees.length; i++) {
+ totalSalary += employees[i].salary;
+ }
+ return this.balance / totalSalary;
+ }
+
+ function hasEnoughFund() returns (bool) {
+ return calculateRunway() > 0;
+ }
+
+ function getPaid() {
+ var (employee, index) = _findEmployee(msg.sender);
+ assert(employee.id != 0x0);
+
+ uint nextPayday = employee.lastPayday + payDuration;
+ assert (nextPayday < now);
+
+ employee.lastPayday = nextPayday;
+ employee.id.transfer(employee.salary);
+ }
+}
diff --git a/Lesson-2/orgin/README.md b/Lesson-2/orgin/README.md
new file mode 100644
index 00000000..0309d947
--- /dev/null
+++ b/Lesson-2/orgin/README.md
@@ -0,0 +1,3 @@
+## 硅谷live以太坊智能合约 第二课《智能合约设计进阶-多员工薪酬系统》
+
+这里是每一课的初始代码,有需要的同学可以参考
diff --git a/Lesson-2/orgin/payroll.sol b/Lesson-2/orgin/payroll.sol
new file mode 100644
index 00000000..62e380e4
--- /dev/null
+++ b/Lesson-2/orgin/payroll.sol
@@ -0,0 +1,50 @@
+pragma solidity ^0.4.14;
+
+contract Payroll {
+ struct Employee {
+ address id;
+ uint salary;
+ uint lastPayday;
+ }
+
+ uint constant payDuration = 10 seconds;
+
+ address owner;
+ Employee[] employees;
+
+ function Payroll() {
+ owner = msg.sender;
+ }
+
+ function _partialPaid(Employee employee) private {
+ }
+
+ function _findEmployee(address employeeId) private returns (Employee, uint) {
+ }
+
+ function addEmployee(address employeeId, uint salary) {
+ }
+
+ function removeEmployee(address employeeId) {
+ }
+
+ function updateEmployee(address employeeId, uint salary) {
+ }
+
+ function addFund() payable returns (uint) {
+ }
+
+ function calculateRunway() returns (uint) {
+ uint totalSalary = 0;
+ for (uint i = 0; i < employees.length; i++) {
+ totalSalary += employees[i].salary;
+ }
+ return this.balance / totalSalary;
+ }
+
+ function hasEnoughFund() returns (bool) {
+ }
+
+ function getPaid() {
+ }
+}
diff --git a/Lesson-3/README.md b/Lesson-3/README.md
new file mode 100644
index 00000000..ba26ced6
--- /dev/null
+++ b/Lesson-3/README.md
@@ -0,0 +1,16 @@
+## 硅谷live以太坊智能合约频道官方地址
+
+### 第三课《智能合约后端优化和产品化》
+
+目录结构
+
|
+
|--orgin 课程初始代码
+
|
+
|--assignment 课程作业提交代码
+
+### 本节知识点
+第3课:智能合约后端优化和产品化
+- 如何通过数据结构优化降低合约执行成本
+- 合约的继承
+- 巧用modifier
+- 以太坊函数库的使用和基本介绍
diff --git a/Lesson-3/assignment/README.md b/Lesson-3/assignment/README.md
new file mode 100644
index 00000000..01011eb4
--- /dev/null
+++ b/Lesson-3/assignment/README.md
@@ -0,0 +1,14 @@
+## 硅谷live以太坊智能合约 第三课作业
+这里是同学提交作业的目录
+
+### 第三课:课后作业
+- 第一题:完成今天所开发的合约产品化内容,使用Remix调用每一个函数,提交函数调用截图
+- 第二题:增加 changePaymentAddress 函数,更改员工的薪水支付地址,思考一下能否使用modifier整合某个功能
+- 第三题(加分题):自学C3 Linearization, 求以下 contract Z 的继承线
+- contract O
+- contract A is O
+- contract B is O
+- contract C is O
+- contract K1 is A, B
+- contract K2 is A, C
+- contract Z is K1, K2
diff --git a/Lesson-3/assignment/yours.sol b/Lesson-3/assignment/yours.sol
new file mode 100644
index 00000000..692b1a41
--- /dev/null
+++ b/Lesson-3/assignment/yours.sol
@@ -0,0 +1,83 @@
+/*作业请提交在这个目录下*/
+pragma solidity ^0.4.14;
+
+contract Payroll {
+ struct Employee {
+ address id;
+ uint salary;
+ uint lastPayday;
+ }
+
+ uint constant payDuration = 10 seconds;
+
+ uint totalSalary;
+
+ address owner;
+ mapping(address => Employee) employees;
+
+ function Payroll() {
+ owner = msg.sender;
+ }
+
+ function _partialPaid(Employee employee) private {
+ uint payment = employee.salary * (now - employee.lastPayday) / payDuration;
+ employee.id.transfer(payment);
+ }
+
+
+ function addEmployee(address employeeId, uint salary) {
+ require(msg.sender == owner);
+ var emloyee = employees[employeeId];
+ assert(emloyee.id == 0x0);
+ totalSalary += salary * 1 ether;
+ employees[employeeId] = Employee(employeeId, salary * 1 ether, now);
+ }
+
+ function removeEmployee(address employeeId) {
+ require(msg.sender == owner);
+ var employee = employees[employeeId];
+ assert(employee.id != 0x0);
+
+ _partialPaid(employee);
+ totalSalary -= employees[employeeId].salary;
+ delete employees[employeeId];
+
+ }
+
+ function updateEmployee(address employeeId, uint salary) {
+ require(msg.sender == owner);
+ var employee = employees[employeeId];
+ assert(employee.id != 0x0);
+
+ _partialPaid(employee);
+ totalSalary -= employees[employeeId].salary;
+ employees[employeeId].salary = salary * 1 ether;
+ totalSalary += employees[employeeId].salary;
+ employees[employeeId].lastPayday = now;
+ }
+
+ function addFund() payable returns (uint) {
+ return this.balance;
+ }
+
+ function calculateRunway() returns (uint) {
+ return this.balance / totalSalary;
+ }
+
+ function hasEnoughFund() returns (bool) {
+ return calculateRunway() > 0;
+ }
+
+
+ function getPaid() {
+ var employee = employees[msg.sender];
+ assert(employee.id != 0x0);
+
+ uint nextPayday = employee.lastPayday + payDuration;
+ assert (nextPayday < now);
+
+ employees[msg.sender].lastPayday = nextPayday;
+ employee.id.transfer(employee.salary);
+ }
+}
+
diff --git a/Lesson-3/orgin/README.md b/Lesson-3/orgin/README.md
new file mode 100644
index 00000000..6106ea19
--- /dev/null
+++ b/Lesson-3/orgin/README.md
@@ -0,0 +1,3 @@
+## 硅谷live以太坊智能合约 第三课
+
+这里是每一课的初始代码,有需要的同学可以参考
diff --git a/Lesson-3/orgin/payroll.sol b/Lesson-3/orgin/payroll.sol
new file mode 100644
index 00000000..e69de29b